実行中のgroovyの行番号を知るためのもうひとつの方法 - これだといいかも。
2007/10/15
groovy
前回、 プログラマメモ2: 実行中のgroovyの行番号を知るためのもうひとつの方法 - でも、だめなようです。、のコードより正確になっています。
H氏からのいただきものコードです。
def getCurrentLineNumber() {
def the_thisClassName = getClass().getName()
def the_inThisObject = new Throwable().getStackTrace().findAll {the_stackTraceElement ->
the_thisClassName.equals(the_stackTraceElement.getClassName())
}
return the_inThisObject[1].getLineNumber()
}
def the_thisClassName = getClass().getName()
def the_inThisObject = new Throwable().getStackTrace().findAll {the_stackTraceElement ->
the_thisClassName.equals(the_stackTraceElement.getClassName())
}
return the_inThisObject[1].getLineNumber()
}
実行しているスクリプト自身でマッチさせていますね。
使用方法は、スクリプトから上記のメソッドを呼び出せばその呼び出しした行がわかります。
ちなみに、クロージャーの中から実行されいる場合、this.getClass()ではスクリプトのクラスがわかりませんが、そういう場合は、
owner.class.name
で実行しているスクリプトのクラスがみつけれるようですね。
あとgroovyだとisというメソッドがありますね。
#これってなんでしょうかね?
ちょっと実験コード
new Throwable().getStackTrace().each(){ s ->
if(s.getClassName().is(owner.class.name)){
println "o_o! ${s}"
}
}
if(s.getClassName().is(owner.class.name)){
println "o_o! ${s}"
}
}
: