0

私はGroovyを学んでいて、この奇妙な振る舞いに出くわしました. で次のコードを実行するgroovyshと問題なく動作しますが、「foo.groovy」として保存してから実行すると、3 行目にgroovy foo.groovy結果が表示されます。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 }このエラーは解消されますが、より複雑な実際のユースケースでは回避したいと思います。クラス内の同じ問題を扱うこの質問も見つけましたが、私のメソッドはクラス内になく、保持したいPythonのバックグラウンドから来ているため、使用するソリューションは適用できませんその方法。this.&

私は何を間違っていますか?そして、この動作はどこに文書化されていますか?

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 に答える