Можно ли восстановить имя функции изнутри функции в Scala? - PullRequest
22 голосов
/ 23 июня 2010

Я бы хотел сделать что-то вроде

def getMeASammy() {println "getMeASammy"}
def getMeADrink() {println "getMeADrink"}
def getMeASub() {println "getMeASub"}

Но я не хочу явно набирать имя функции.

Ответы [ 2 ]

38 голосов
/ 24 июня 2010
scala> def currentMethodName() : String = Thread.currentThread.getStackTrace()(2).getMethodName
currentMethodName: ()String

scala> def getMeASammy() = { println(currentMethodName()) }
getMeASammy: ()Unit

scala> getMeASammy()
getMeASammy
3 голосов
/ 24 июня 2010

Это несколько отвратительно, но единственный поддерживаемый способ получить имя текущего метода из JVM - это создать исключение (но не выбросить его), а затем прочитать имя метода из трассировки стека исключения.

  def methodName:String= new Exception().getStackTrace().apply(1).getMethodName()
...