Java编译器中的“let expression”(LetExpr)的目的是什么?
Java编译器似乎支持在com.sun.tools.javac.tree.*
查找expression式(查找LetExpr
)。
JCTree的一个评论甚至提到了一些语法
(let int x = 3; in x+2)
这当然不被语言的语法所接受,并在早期的编译器阶段被拒绝。
我想知道这个构造的起源,这是我以前从未见过的。
它是由javac
内部使用还是由其他工具合成? 这可能仅仅是从Java早期的语言特征,从未见过光的一个神器?
今天有什么有用的东西可以用吗?
一般来说,它为什么存在?
一般来说,它为什么存在?
它存在的自动装箱,如谷歌build议。
如果你有这样的代码:
Integer foo = 0; foo++;
Java在内部把它变成这个帮助expression式:
Integer foo = 0; let int foo_helper = foo.intValue() in foo_helper++;
来源: http : //bugs.sun.com/bugdatabase/view_bug.do?bug_id=6614974
这个expression式显然没有语法表示,它只是一个简化编译的AST级转换。
这被称为letforms,用于“缩写”。
另一方面,在过程语言中,这被称为“声明一个variables”,因为variables的“值”单元可以在过程语言中变异。 (在函数式语言中,它只是一个缩写,没有什么不同,只是把它写出来)
我可以想象在语言用户编写的源代码中使用它的许多语言(Haskell,ML,Scheme,SBCL,Arc,…),所以不知道你怎么没有看到它…
还是你的意思只是在Java?
let x = 2 in (x + 5)
简写为:
(\x (x + 5)) 2
这将最终减less到
(2 + 5)
\
应该是lambda。
至于为什么它在Java中,不知道。 它应该做的是声明variables,所以检查它是否在那里使用。
- 什么是正确的方式来configurationXCode 4工作空间来build立依赖关系?
- IIS 7.5修复试图加载一个不正确的格式问题的程序?
- 在Visual Studio c#项目中自动embeddedmercurial修订信息
- UIScrollview与UIButtons – 如何重新创build跳板?
- Visual Studio 2010不自动链接从属项目的静态库,因为它应该是应该的
- Xcode 9 – “固定宽度限制可能会导致裁剪”和其他本地化警告
- 如何过滤xcodebuild命令行输出?
- 使用msbuild指定解决scheme的项目文件
- IBOutletCollection在Interface Builder中设置sorting