【问题标题】:How does 'f(x) { return x }' differ from 'f = { x -> x }'?'f(x) { return x }' 与 'f = { x -> x }' 有何不同?
【发布时间】:2017-09-21 08:01:02
【问题描述】:

鉴于这个 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 的定义以使之前的版本运行(可能使用&. 运算符)?

【问题讨论】:

    标签: function groovy


    【解决方案1】:

    与:

    def f(x) { return x }
    

    您定义了一个不是对象的方法,而使用:

    def f = { x -> x }
    

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

    这些不是等价的存在。见here

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

    def f(x) { return x }
    
    def g = this.&f
    
    println g(42)
    

    【讨论】:

    • 啊,我明白了——我没有意识到方法不是 Groovy 意义上的对象!谢谢,这就解释了。确实,使用this.&f 有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    相关资源
    最近更新 更多