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 接口的对应物)。如果使用块类型的参数声明方法,则必须为其提供一个块;您不能用非块对象替换块。
我注意到 Java 的 Lambda 表达式 似乎等同于 Objective-C blocks.
Java 的 Lambda 表达式是否完全等同于 Objective-C 的块?如果不是,Objective-C 块有何不同?
在非常高的层次上,是的,它们是:据说块和 lambda 都实现了 closures。非常非正式地,它们服务于 "packaging" 可执行逻辑以及逻辑运行的数据的相同目的,目的是传递它或存储以供延迟执行。
但是,当您了解块的实现及其相关语言时,会发现许多重要差异。
例如,Java 中的 lambda 可以被认为是创建实现单一方法接口的匿名内部 classes 的快捷方式。实现相同接口的 class 的对象可以到达 lambda 可以到达的任何地方。
相比之下,Objective-C 中的块是一个独立于协议的概念(可以将其视为 Java 接口的对应物)。如果使用块类型的参数声明方法,则必须为其提供一个块;您不能用非块对象替换块。