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()、正しい行を取得できるメソッドがあります。