我是Groovy的新手.我想实现这个目标:
def a = { assert 1 == 1 }
def method(def a)
{
println a
}
method(a)
Run Code Online (Sandbox Code Playgroud)
在println现在打印ConsoleScript1$_run_closure1@72e9108f.但我希望它会打印出来assert 1 == 1.那可能吗?
import groovy.inspect.swingui.AstNodeToScriptVisitor
def a = { assert 1 == 1 }
def method( def a ) {
new StringWriter().with { writer ->
a.metaClass.classNode.getDeclaredMethods("doCall")[0].code.visit new AstNodeToScriptVisitor( writer )
println "{\n$writer}"
}
}
method( a )
Run Code Online (Sandbox Code Playgroud)
到文件test.groovy然后做:
groovy test.groovy
Run Code Online (Sandbox Code Playgroud)
你得到输出:
{
assert 1 == 1 : null
return null
}
Run Code Online (Sandbox Code Playgroud)
我认为这就像你要接近的那样......没有使用code变量中的位置数据 (这是一个Groovy语句类)来获取行/列号并将文件解析为文本以提取它. .