2013-10-21 67 views
0

我正在学习Groovy并遇到了这种奇怪的行为。执行中groovysh作品下面的代码没有问题,但将其保存为“foo.groovy”,并在MissingPropertyException: No such property: a for class: foo在3线过groovy foo.groovy结果运行它:代码在shell中工作,但不作为脚本 - MissingPropertyException

def a(n) { n*n } 
def x(m) { m(2) } 
x(a) 

更改a到闭合a = { n -> n*n }使得这个错误去但我想避免那些更复杂的真实用例。我也发现this question其中处理类中的相同问题,但使用this.&的解决方案不适用,因为我的方法不在类的内部,并且来自Python背景我想保持这种方式。

我在做什么错?这种行为记录在哪里?

回答

1

它看起来像groovysh店:

def a(n) { n*n } 

为MethodClosure到名为a

这不会发生groovysh以外的结合变量,如你所看到的,您需要定义一个作为封闭件:

def a = { n -> n*n } 
def x(m) { m(2) } 
x(a) 

或者使用方法参照操作者&

def a(n) { n*n } 
def x(m) { m(2) } 
x(this.&a) 
相关问题