甲
throw语句,那么,一个声明,而不是表达式所以它必须被置于括号内。根据本文的内容,Java专家组当时对lambda的语法进行了非正式调查,其中有四个选择:
- 稻草人 :
#(arglist)(expr) and #(arglist){statements}
- BGGA :(
{ args -> statements }
类似于Scala和Groovy) - SotL :
#{ args -> statements}
- 雷德蒙德 :
(args) -> { statements }
最终,选择是根据该线程采用类似于C#的语法,据我所知,它看起来与上述最后一个选项最接近。在C#中,
表达式lambdas 和 语句lambdas 之间是有区别的:
表达式lambda(C#):
(input parameters) => expression
语句lambda(C#):
(input parameters) => {statement;}
该语法在MSDN文档页面中进行了说明。
在上一个线程中提到了选择此语法而不是其他选项的原理:
选择此语法的决定是双重的:
- 在大多数主观指标上,语法的得分为“很好”(尽管在某些情况下,它看起来很糟糕,就像其他所有方法一样)。特别是,它对于用作方法参数的“小”
lambda效果很好(一种常见情况),对于大(多语句)lambda效果也很好。*尽管进行了广泛的搜索,但在替代方案中并没有明确的赢家(每种形式都有一些好的方面,而某些方面却不是很好,并且没有任何一种形式明显优于其他形式)。因此,我们觉得最好选择一种已经证明可以在两种最相似的Java(C#和Scala)语言中很好地工作的东西,而不是发明一些新东西。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)