代码之家  ›  专栏  ›  技术社区  ›  Frerich Raabe

“f(x){return x}”与“f={x->x}”有何不同?

  •  3
  • Frerich Raabe  · 技术社区  · 8 年前

    给定此Groovy程序:

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

    非常棒。lang.MissingPropertyException:对于类:x,没有这样的属性:f 在x.run时(x.groovy:3)

    def f = { x -> x }
    
    g = f
    
    println g(42)
    

    使解释器按预期打印“42”。

    为什么这两个定义 f 区别对待?有没有办法调整 g 使前一个版本运行(可能使用 &. 操作员)?

    1 回复  |  直到 8 年前
        1
  •  5
  •   Opal    8 年前

    使用:

    def f(x) { return x }
    

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

    def f = { x -> x }
    

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

    你确实可以使用 & 操作员(in 转动 闭包方法):

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