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

Groovy 代码在shell中工作,但不能作为脚本-MissingPropertyException,groovy,higher-order-functions,Groovy,Higher Order Functions,我正在学习Groovy,遇到了这种奇怪的行为。在groovysh中执行以下代码没有问题,但是将其保存为'foo.groovy'并通过groovy foo.groovy运行它会导致第3行中出现MissingPropertyException:没有这样的属性:类:foo的a: def a(n) { n*n } def x(m) { m(2) } x(a) 将a更改为闭包a={n->n*n}可以消除此错误,但对于更复杂的实际用例,我希望避免这种情况。我还发现了在类内部处理相同问题的方法,但是使用th

我正在学习Groovy,遇到了这种奇怪的行为。在
groovysh
中执行以下代码没有问题,但是将其保存为'foo.groovy'并通过
groovy foo.groovy
运行它会导致第3行中出现
MissingPropertyException:没有这样的属性:类:foo
的a:

def a(n) { n*n }
def x(m) { m(2) }
x(a)
a
更改为闭包
a={n->n*n}
可以消除此错误,但对于更复杂的实际用例,我希望避免这种情况。我还发现了在类内部处理相同问题的方法,但是使用
this.&
的解决方案不适用,因为我的方法不在类内部,并且来自python背景,我希望保持这种方式


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

它看起来像
groovysh
存储:

def a(n) { n*n }
将MethodClose作为一个名为
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 )