为什么必须在lambda主体中使用全代码块将throw语句括起来?

为什么必须在lambda主体中使用全代码块将throw语句括起来?,第1张

为什么必须在lambda主体中使用全代码块将throw语句括起来?

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)语言中很好地工作的东西,而不是发明一些新东西。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5616192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存