7

Groovyスクリプトからクロージャーを抽出しようとしています。私は閉鎖を次のように定義します

def printMe = {str ->println str}

私のgroovyファイルで、次のようにバインディングから取得して使用してみてください。

GroovyScriptEngine gse = new GroovyScriptEngine(new String[] { "scripts" });
Binding binding = new Binding();
gse.run("test.groovy", binding);
Closure cls = (Closure) binding.getVariable("printMe");
cls.call("foo");

しかし、これを実行すると、次のエラーが発生します。

groovy.lang.MissingPropertyException: No such property: 
    printMe for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:55)
    at GroovyTry.main(GroovyTry.java:19)

Groovyスクリプトからクロージャ(またはプレーンメソッド)を取得する方法はありますか?

4

1 に答える 1

9

defクロージャー宣言からを省略するとどうなりますか?

printMe = { str -> println str }

printMedef を使用することで、Binding に入るのではなく、変数がスクリプトに対してローカルになると思います

スコーピングと「def」のセマンティクスの詳細を読む

于 2010-07-30T10:22:37.867 に答える