0

我正在学习 Groovy 并遇到了这种奇怪的行为。在没有问题的情况下执行以下代码groovysh,但将其保存为 'foo.groovy' 并通过运行它会groovy foo.groovy导致MissingPropertyException: No such property: a for class: foo第 3 行中的结果:

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

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

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

4

1 回答 1

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 )
于 2013-10-21T12:04:12.393 回答