【发布时间】:2015-02-01 19:44:55
【问题描述】:
我最近遇到了来自 EclipseCon 2014 的 presentation,在第 5 页上他们说 “Lambda 表达式允许您将代码视为数据”。
我也遇到了这个示例代码
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("button clicked");
}
});
来自 Richard Warburton 的“Java 8 Lambdas: Pragmatic Functional Programming”
“这实际上是一个使用代码作为数据的例子——我们给出了 button 一个代表动作的对象。”
对于 Lambda 表达式和/或匿名内部类,code as data 是什么意思?
【问题讨论】:
-
我猜它是指将方法作为值传递,而 lambdas 给人一种做事的错觉。值被视为数据,“代码”可能是指作为方法的代码块
-
看起来像任何将函数视为主要类公民的函数式语言(将函数作为另一个函数的输入的概念)。这个例子对我来说看起来很乱,其他函数式或混合函数式的语言在语法上做得更好,例如检查 Scala(它仍然基于 JVM)。
-
“代码即数据”是一个标语,并不意味着您不知道任何事情。
标签: java lambda java-8 anonymous-inner-class