这段代码:
evaluate ("def test() { println \"Test is successful!\" }")
test()
Run Code Online (Sandbox Code Playgroud)
结果例外:
致命:没有方法签名:script1409644336796288198097.test()适用于参数类型:()values:[]可能的解决方案:use([Ljava.lang.Object;),getAt(java.lang.String),use(java) .util.List,groovy.lang.Closure),使用(java.lang.Class,groovy.lang.Closure),wait(),wait(long)groovy.lang.MissingMethodException:没有方法签名:script1409644336796288198097.test( )适用于参数类型:()values:[]可能的解决方案:use([Ljava.lang.Object;),getAt(java.lang.String),use(java.util.List,groovy.lang.Closure) ,使用(java.lang.Class,groovy.lang.Closure),wait(),等待(长)atg.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55)...
我做错了什么?
Wil*_*ill 12
该脚本评估结果为null.您应该返回一些内容或执行脚本并返回结果.
返回闭包而不是定义方法的示例:
test = evaluate ('return { "Test is successful!" }')
assert test() == "Test is successful!"
Run Code Online (Sandbox Code Playgroud)
以及脚本执行方法本身的示例:
result = evaluate 'def test() { "eval test" }; return test()'
assert result == "eval test"
Run Code Online (Sandbox Code Playgroud)
如果无法更改脚本代码,则可以从脚本解析类,创建新对象,然后执行以下test()方法:
def parent = getClass().getClassLoader()
def loader = new GroovyClassLoader(parent)
def clazz = loader.parseClass('def test() { "new class definition" }');
obj = clazz.newInstance()
assert obj.test() == "new class definition"
Run Code Online (Sandbox Code Playgroud)