0

簡単にするために、次のようなコードがあるとします。

def testMethod(String txt) {
    return txt;
}
public String evaluate(String expression) {
    //String result = "${testMethod('asdasdasd')}";
    String result = "${expression}";
    return result;
}

メソッド「evaluate」に渡される式の値を実行する必要があります。

電話の場合

// everything works perfectly well,
String result = "${testMethod('samplestring')}"; 

電話の場合

// (when expression = testMethod) - everything works perfectly well,
String result = "${expression}"("samplestring"); 

電話の場合

// (when expression = testMethod('samplestring'))  - it's not working.
// I see testMethod('samplestring') as the result, but I need it to be evaluated.
String result = "${expression}" 

どうやってやるの?ありがとう。

4

2 に答える 2

1

したがって、同様に機能するはずです。

Eval.me( "${expression}" )

編集

指摘したように、これはそのままでは機能しません。メソッドを含むスクリプトを次のように渡す必要がありますEval.x

def testMethod(String txt) {
    txt
}

public String evaluate(String expression) {
    String result = Eval.x( this, "x.${expression}" )
    result
}

println evaluate( "testMethod('samplestring')" )

それは印刷されますsamplestring

于 2011-11-02T19:14:36.277 に答える
0

GroovyShellこの目的でクラスを使用できますが、バインディング AFAIK を定義する必要があります。これは Groovy コンソールで機能します。

def testMethod(txt) {
    "$txt!";
}

def evaluate(String expression) {
    def binding = new Binding(['testMethod': testMethod])
    new GroovyShell(binding).evaluate(expression)
}

evaluate('testMethod("Hello World")');
于 2011-11-02T18:33:29.990 に答える