Scala - 恢复功能名称

时间:2017-02-25 01:55:54

标签: scala

我有这个计时器对象:

object Timed {
  def apply[T](fn: => T)(implicit logger: Logger): T =
    measureDuration(Thread.currentThread().getStackTrace.last.getMethodName, TimeUnit.MILLISECONDS, fn, logger)
}

我想要这样(在另一个class中):

def test(): Unit = {
  implicit val logger: Logger = LoggerFactory.getLogger("testTimed")
  Timed { someFunction() }
}

AND - 我想恢复"someFunction"中的字符串Timed.apply以传递而不是堆栈的最后一个方法的名称。这甚至可能吗?

我试着看看宏,但很快就迷路了。我认为这将是一个挑战。有什么想法吗?

更多详情:

Timer.apply内,我们只有fn,但是当我们写Timed { someFunction() }时,有一个函数名称:someFunction - 该字符串("someFunction")是我想要恢复和打印出来的东西。

对于Timed { 2 + 2 }Timed { x }这样的情况:我们可以假设按照惯例,用户会在代码审核中调用Timed("addition") { 2 + 2 }Timed { x }。换句话说,我只对Timed { someFunction() }感兴趣。

1 个答案:

答案 0 :(得分:1)

除了搞乱宏之外,在Timed.apply中获取函数名的最佳方法是将其作为参数传递。如,

Timed("someFunction")(someFunction)