'f(x){return x}'与'f = {x - > X }'?

时间:2017-09-21 08:01:02

标签: function groovy

鉴于这个Groovy程序:

def f(x) { return x }

g = f

println g(42)

将程序提供给Groovy(版本2.4.12)解释程序时,会打印一条错误消息:

  

groovy.lang.MissingPropertyException:没有这样的属性:f表示类:x       在x.run(x.groovy:3)

但是,将程序更改为

def f = { x -> x }

g = f

println g(42)

使解释器按预期打印'42'。

为什么这两个f定义的处理方式不同?有没有办法调整g的定义,以便前一版本运行(可能使用&.运算符)?

1 个答案:

答案 0 :(得分:5)

使用:

def f(x) { return x }

您定义的方法不是对象,而是:

def f = { x -> x }

你定义一个闭包,它是一个groovy的对象。

这些不是等同的生物。见here

您确实可以使用&运算符(在中将方法转换为闭包):

def f(x) { return x }

def g = this.&f

println g(42)