Il compilatore Java sembra supportare le espressioni let
in com.sun.tools.javac.tree.*
(cercare LetExpr
).Scopo di "let expression" (LetExpr) nel compilatore Java?
Un commento in JCTree menziona anche qualche sintassi
(let int x = 3; in x+2)
che naturalmente non è accettato dalla grammatica della lingua e ha respinto in una fase precedente del compilatore.
Mi chiedo sull'origine di questo costrutto, che non ho mai visto prima.
Viene utilizzato internamente da javac
o è sintetizzato da altri strumenti? È forse solo un artefatto fin dai primi giorni di Java da una funzionalità linguistica che non ha mai visto la luce?
C'è qualcosa di utile che può essere fatto con esso oggi?
In generale, perché esiste?
Quella pagina non dice che * esiste * per l'autoboxing, solo che è * usato * in autoboxing. Dato che la pagina tratta di un bug nella autoboxing, e non delle let-expression, non sorprende che l'autoboxing sia l'unico uso per le espressioni esplicite che menziona. (Non sto dicendo che ti stai sbagliando - davvero non lo so - ma penso che sarebbe utile aggiungere una fonte più rilevante/convincente/esplicita, se ne conosci uno.) – ruakh
cosa fa 'lascia int foo_helper = foo.intValue() in foo_helper ++; 'even mean? – ArtB
@ArtB È simile alla sintassi ml. lascia var = value in expression. Pertanto nell'espressione, tutte le istanze di var valutano il valore. – Matthew