代码在shell中工作,但不作为脚本 - MissingPropertyException

时间:2013-10-21 11:52:20

标签: groovy higher-order-functions

我正在学习Groovy,并且遇到了这种奇怪的行为。在groovysh中执行以下代码可以顺利运行,但将其另存为“foo.groovy”并通过groovy foo.groovy运行会在第3行中生成MissingPropertyException: No such property: a for class: foo

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

a更改为闭包a = { n -> n*n }会使此错误消失,但我想避免使用更复杂的实际用例。我还发现this question处理类中的同样问题,但使用this.&的解决方案不适用,因为我的方法不在类,来自python背景,我想保持这种方式。

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

1 个答案:

答案 0 :(得分:1)

看起来像groovysh商店:

def a(n) { n*n }

作为MethodClosure进入名为a

的绑定变量

这不会发生在groovysh之外,正如你所看到的,你需要将a定义为闭包:

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 )