स्कैला 2.9.एक्स में, मैंने func फ़ंक्शन लिखा है जो मुझे फ़ंक्शन का नाम वापस देता है जहां func() को FUNC सी प्रीप्रोसेसर मैक्रो की तरह निष्पादित किया जाता है। मैं समझता हूं कि 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 –