Java和Objective-C块中的lambdas有什么区别?

时间:2015-05-23 11:39:00

标签: objective-c lambda closures objective-c-blocks

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

Java的Lambda表达式是否完全等同于Objective-C的块?如果不是,那么什么使Objective-C块不同?

1 个答案:

答案 0 :(得分:6)

在非常高的层面上,是的,它们是:块和lambda都被称为实现closures。非正式地,它们的目的是将可执行逻辑与逻辑运行的数据“打包”在一起,以便传递或存储以延迟执行。

但是,当你进入块的实现及其周围的语言时,有许多重要的区别。

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

相比之下,Objective-C中的块是与协议(可以被认为是Java接口的对应物)的单独概念。如果使用块类型的参数声明方法,则必须为其提供块;你不能用非块对象代替块。