Scala 2.9.xでは、func()関数を書いて、func()が実行された関数の名前をFUNC Cプリプロセッサマクロのように戻しました。私はScala2.10では、仕事をするために例外をスローするよりもエレガントなものを書くことができるはずであることを理解しています。Scalaの__FUNC__マクロ2.10
どうすればいいですか?あなたの助けを前にありがとう。
私は例外なくそれをやってわからないんだけど、あなたが実際にスタックトレースを取得するには、例外をキャッチ/スローする必要はありませんobject TestMyLog extends App {
val MatchFunc = """(.+)\(.+""".r
def func(i_level: Int): String = {
val s_rien = "functionNotFound"
try {
throw new Exception()
} catch {
case unknwn => unknwn.getStackTrace.toList.apply(i_level).toString match {
case MatchFunc(funcs) => funcs.split('.').toList.last
case _ => s_rien
}
} finally {
s_rien
}
}
def tracedFunction1 = func(1)
def tracedFunction2 = func(1)
println(tracedFunction1)
assert(tracedFunction1=="tracedFunction1")
println(tracedFunction2)
assert(tracedFunction2=="tracedFunction2")
}
あなたも、例外を作成せずにスタックトレースを取得することができます:。スレッドのgetStackTraceメソッド()メソッドがあります、あなたがにThread.currentThread()を行うことができるようにgetStackTrace.toList –