Groovyは初めてです。私はこれを達成したい:
def a = { assert 1 == 1 }
def method(def a)
{
println a
}
method(a)
今println
印刷しConsoleScript1$_run_closure1@72e9108f
ます。しかし、私はそれが印刷されることを望みますassert 1 == 1
。それは可能ですか?
Groovyは初めてです。私はこれを達成したい:
def a = { assert 1 == 1 }
def method(def a)
{
println a
}
method(a)
今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 )
test.groovy
次に、ファイルに次のようにします。
groovy test.groovy
次の出力が得られます。
{
assert 1 == 1 : null
return null
}
これは、私が思うに近いものです... code
変数(Groovyステートメントクラス)の位置データを使用せずに、行/列番号を取得し、ファイルをテキストとして解析して抽出します。 。
関数でtoString()を呼び出すと、そのソースコードが出力されるJavascriptのような機能を探しています。
GroovyはJVMバイトコードにコンパイルされます。groovyコンパイラは、コンパイルされたJVMクラスファイルにソースコードを保持しません。
Odersky&Coの著書「Programmingin Scala」には、Scalaで書かれた有名な例があります。
基本的に、あなたはしなければなりません:
Groovy SDKにはdirectory.eachFileMatch
、正しいファイルを見つけることができるGroovyメソッドとFile.filterLine()
、正しい行を取得できるメソッドがあります。