此代码:
evaluate ("def test() { println \"Test is successful!\" }")
test()
结果例外:
致命:没有方法的签名:script1409644336796288198097。test()适用于参数类型:()值:[]可能的解决方案:使用([Ljava.lang.Object;),getAt(java.lang.String)、use(java.util.List、groovy.lang.Closure)、use(java.lang.Class、groovy.lang.Closure)、wait()、wait(long)groovy。lang.MissingMethodException:没有方法的签名:script1409644336796288198097。test()适用于参数类型:()值:[]可能的解决方案:使用([Ljava.lang.Object;),getAt(java.lang.String)、use(java.util.List、groovy.lang.Closure)、use(java.lang.Class、groovy.lang.Closure)、wait()、wait(long)在org上。科德豪斯。棒极了。运行时。脚本字节码适配器。展开(ScriptBytecodeAdapter.java:55)。。。
我做错了什么?
如果变量具有未声明的类型,则它将进入脚本绑定。绑定对所有方法都可见,这意味着数据是共享的。
一个辅助方法,允许使用这个脚本绑定作为变量作用域来动态计算groovy表达式。
在变量绑定中,您可以声明一个不接受参数的闭包,并且必须限制为没有参数的调用。
考虑到所有这些,这是您的脚本按预期工作。
evaluate ("test = { -> println \"Test is successful!\" }")
test()
可以使用ExpandoMetaClass将动态闭包添加到自己的类中。您需要事先解析字符串,将其拆分为函数名、参数和代码。
methodName = "test"
methodArgs = []
methodCode = """println "Hello World!" """
this.metaClass."$methodName"{ code, args ->
evaluate(code)
}
然后,您可以通过执行以下操作来调用它:
"$methodName"(code, arguments)
或
test(code, arguments)
获取输出helloworld
您可以在这里阅读更多关于ExpandoMetaClass的信息http://groovy.codehaus.org/ExpandoMetaClass
该脚本计算结果为null。您应该返回一些内容,或者执行脚本并返回结果。
返回闭包而不是定义方法的示例:
test = evaluate ('return { "Test is successful!" }')
assert test() == "Test is successful!"
以及脚本执行方法本身的示例:
result = evaluate 'def test() { "eval test" }; return test()'
assert result == "eval test"
如果您不能更改脚本代码,您可以从脚本中解析一个类,创建一个新对象,然后执行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"
问题内容: 码: 上面的代码不起作用。当我单击#clicker时,它不会发出警报,也不会隐藏。我检查了控制台,没有任何错误。我还检查了JQuery是否正在加载,实际上是否正在加载。所以不确定是什么问题。我还执行了带有警报的文档就绪功能,并且该功能正常工作,因此不确定我在做什么错。请帮忙。谢谢! 问题答案: 您应该在一个块中添加javascript代码。 即 正如jQuery文档指出的那样:“在文档
关于如何修复gradle版本,有很多很好的建议,但有些已经过时了,或者我只是找不到建议的路径。对我来说,一个解决方案是Project>Project Structure>Project>Gradle Version。 在这里我可以把它改成支持的版本,并且成功地构建项目。 从这个链接,它暗示这是设置你的gradle包装的方式。 因此,我希望Project/Platforms/Android/Grad
问题内容: 为什么这个独立的代码不起作用: 即使变量中包含https,每次也可以打印。 问题答案: 如有疑问,请阅读文档: [strpos]返回大海捞针中第一次出现针的数字位置。 因此,您想尝试更多类似的方法: 因为否则返回一个数字,并且您正在寻找布尔值。
为什么在第一次迭代后不停止脚本? 在我看来,它必须在第一次迭代之后停止。
问题内容: 我正在尝试从JSON网址获取集合。骨干网确实发送了请求并得到了响应,但是在它之后的集合中没有: 这是我的JavaScript: 响应中的JSON 响应中的Content-Type HTTP标头为。 为什么不将其加载到集合中?JSON是否正确? 一些更多的代码: 问题答案: 是异步的。尝试 要么 要么
问题内容: 我有三部分字符串,每个部分用 符号分隔 。例如, 现在,当我使用这样的方法拆分它时: 它包含整个字符串作为单个元素的数组。 但是当我使用这个: 它完美的作品是什么,我想这意味着 现在的数组包含,并分别对指数0,1和2。 我想知道为什么第一次使用时不起作用,因为我在使用 问题答案: 因为字符是在正则表达式中用来标记行尾的保留令牌。因此,您必须使用进行 转义。