使用“评估”功能。为什么它不起作用?

2024-05-16

这段代码:

evaluate ("def test() { println \"Test is successful!\" }")
test()

结果异常:

致命:没有方法签名: script1409644336796288198097.test() 适用于参数类型:() 值:[] 可能的解决方案:use([Ljava.lang.Object;)、getAt(java.lang.String)、use(java.util.List, groovy.lang.Closure)、use(java.lang.Class, groovy.lang.关闭)、等待()、等待(长) groovy.lang.MissingMethodException:没有方法签名:script1409644336796288198097.test() 适用于参数类型:() 值:[] 可能的解决方案:use([Ljava.lang.Object;)、getAt(java.lang.String)、use(java.util.List, groovy.lang.Closure)、use(java.lang.Class, groovy.lang.关闭)、等待()、等待(长) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55) ...

我做错了什么?


该脚本评估结果为空。您应该返回某些内容或执行脚本并返回结果。

返回闭包而不是定义方法的示例:

test = evaluate ('return { "Test is successful!" }')
assert test() == "Test is successful!"

还有一个脚本执行方法本身的示例:

result = evaluate 'def test() { "eval test" }; return test()'
assert result == "eval test"

如果您无法更改脚本代码,您可以从脚本中解析一个类 http://groovy.codehaus.org/Embedding+Groovy,创建一个新对象,然后执行test() method:

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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“评估”功能。为什么它不起作用? 的相关文章

随机推荐