Java 和 Objective-C 块中的 lambda 之间有什么区别?

What are the differences between lambdas in Java and Objective-C blocks?

我注意到 Java 的 Lambda 表达式 似乎等同于 Objective-C blocks.

Java 的 Lambda 表达式是否完全等同于 Objective-C 的块?如果不是,Objective-C 块有何不同?

在非常高的层次上,是的,它们是:据说块和 lambda 都实现了 closures。非常非正式地,它们服务于 "packaging" 可执行逻辑以及逻辑运行的数据的相同目的,目的是传递它或存储以供延迟执行。

但是,当您了解块的实现及其相关语言时,会发现许多重要差异。

例如,Java 中的 lambda 可以被认为是创建实现单一方法接口的匿名内部 classes 的快捷方式。实现相同接口的 class 的对象可以到达 lambda 可以到达的任何地方。

相比之下,Objective-C 中的块是一个独立于协议的概念(可以将其视为 Java 接口的对应物)。如果使用块类型的参数声明方法,则必须为其提供一个块;您不能用非块对象替换块。