在斯卡拉2.9.x中,我寫了func函數,它給了我函數的名稱,func()被執行,就像FUNC C預處理宏。我明白,在Scala2.10中,我應該能夠寫出比投擲異常更優雅的東西來完成這項工作。__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 –