如何在lambda演算术语中定义匿名函数(或者我怎么能说某些语言支持匿名函数)?

时间:2010-11-19 11:58:43

标签: programming-languages lambda computer-science

java支持当前版本的6个lambda表达式或“匿名函数”吗?有没有我用java支持lambda表达式的编程语言无法做到的东西?我知道java是完整的,所以你可以在其中做“任何事情”。

为什么匿名内部类包装函数不能表示lambda演算中定义的函数?

实际上什么是匿名函数以及如何说某些语言支持匿名函数?

2 个答案:

答案 0 :(得分:17)

答案 1 :(得分:0)

C#中的lambda表达式和Java中的匿名内部类之间的一个重要区别是,在Java中,内部类中引用的任何局部变量都由 value 捕获 - 这就是为什么变量必须是最终的。该变量的值在构造时被复制到内部类中。

在C#中,变量可以通过方法中的lambda表达式或其他代码进行更改,这些更改也可以在两个位置看到。

您可以通过将原始变量包装在可变包装中来用Java模拟它 - 例如单个元素数组 - 并使包装器变量最终。虽然这是一个非常糟糕的黑客。

使用匿名内部类IMO的最大问题是纯粹的冗长 - 说明你正在扩展的类,然后是你要覆盖的方法等。

有关闭包的更多信息,特别是在这方面比较Java和C#,请参阅my article on the topic