题
我想做类似的事情
def getMeASammy() {println "getMeASammy"}
def getMeADrink() {println "getMeADrink"}
def getMeASub() {println "getMeASub"}
但是,我不想明确输入功能的名称。
解决方案
scala> def currentMethodName() : String = Thread.currentThread.getStackTrace()(2).getMethodName
currentMethodName: ()String
scala> def getMeASammy() = { println(currentMethodName()) }
getMeASammy: ()Unit
scala> getMeASammy()
getMeASammy
其他提示
这有点反复,但是从JVM获取当前方法名称的唯一支持方法是创建异常(但不要抛出它),然后从异常的堆栈跟踪中读取方法名称。
def methodName:String= new Exception().getStackTrace().apply(1).getMethodName()
我写了一个 简单库, ,它使用宏来获取功能的名称。它可能比使用更优雅的解决方案 Thread.currentThread.getStackTrace()(2).getMethodName
如果您不介意其他依赖性:
libraryDependencies += "com.github.katlasik" %% "functionmeta" % "0.2.3" % "provided"
import io.functionmeta._
def getMeASammy() {
println(functionName) //will print "getMeASammy"
}
的名字 准确地做到这一点,并在编译时,因此没有创建异常,检查堆栈跟踪和其他反射式开销。
name of readme的相关示例:
import com.github.dwickern.macros.NameOf._
def startCalculation(value: Int): Unit = {
println(s"Entered ${nameOf(startCalculation _)}")
}
// compiles to:
def startCalculation(value: Int): Unit = {
println(s"Entered startCalculation")
}
就你而言
def getMeASammy() = println(nameOf(getMeASammy _))
还, nameOf
使用类,类属性,类型等。
不隶属于 StackOverflow