我在一个使用shell.evaluate()
方法加载的groovy文件中定义了Closure。
我需要通过使用shell."$closurename".call(arguments
)调用调用程序来调用此闭包。
但是为了形成闭包参数(上面的参数),我现在需要封闭$ Closurename接受的参数和参数名称是什么。有没有办法在Groovy中动态地了解这一点?我检查了metaClass.method属性,但这在我下面的示例中不起作用。
以下是示例代码。
def arguments;
shell.evaluate(new File("/tmp/myGroovyClosureFile.groovy"))
testBlock = "myClosureName"
//Code here to find the parameters for myClosureName and create
//the arguments variable
shell."$testBlock".call(arguments)
答案 0 :(得分:0)
有没有办法在Groovy中动态地了解这一点?
您无法在运行时动态执行此操作。
答案 1 :(得分:0)
正如Jeff所提到的那样,为闭包生成代码时,以某种方式使参数名称匿名化似乎很繁琐。但是,您仍然可以使用反射来获取尽可能多的信息:
def cl = { int a, String b ->
println(a)
println(b)
}
def callMethod = cl.class.methods.find {
it.name == "call"
}
println callMethod.parameterTypes
println callMethod.parameters.name
并输出:
[int, class java.lang.String]
[arg0, arg1]