Lambdas, die nur aus einem Statement bestehen, und ohne {} geschrieben werden, werden falsch geparst #17
Labels
No Label
Codegen
confirmed
duplicate
Eclipse-Plugin
Feature Request
generics
in progress
invalid
JavaCompilerCore
needs info
Parser
Trash
Type
Unify
won't fix
works for me
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: JavaTX/JavaCompilerCore#17
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Z.B: Runnable lam = () -> System.out.println("lambda");
wird als Return-statement geparst.
Aber Runnable lam = () -> {System.out.println("lambda");};
wird richtig geparst.
Obwohl beide gleich sind.
Der Fall:
lam = () -> expr;
ist syntactic sugar und steht eigentlich für:
lam = () -> {return expr;}
Der Java-Compiler kann feststellen, ob der body eines Lambda Ausdrucks einen Wert oder Void zurückgibt (siehe 1)
Unser Compiler kann das zum Zeitpunkt des parsens nicht. Beispiel:
class A{
void m(){}
}
class B{
Integer m(){return 1;}
}
[...]
lam = () -> a.m(); // Hier ist unklar, ob A.m() oder B.m() aufgerufen wird
Wir können nicht feststellen, ob ein Lambda-Ausdruck:
lam = () -> expr;
nun zu lam = () -> { return expr; } oder zu lam = () -> { expr; } geparst werden soll