In Scala 2.9.x habe ich die func-Funktion geschrieben, die mir den Namen der Funktion zurückgibt, in der func() ausgeführt wird, ähnlich dem FUNC C-Präprozessor-Makro. Ich verstehe, dass ich in Scala 2.10 etwas eleganteres schreiben sollte als eine Ausnahme zu werfen, um den Job zu erledigen.
Wie kann ich das machen? Vielen Dank im Voraus für Ihre Hilfe.
object TestMyLog extends App {
val MatchFunc = """(.+)\(.+""".r
def func(i_level: Int): String = {
val s_rien = "FunktionNichtGefunden"
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")
}