如何在没有调用的情况下测量scala函数的时间?

时间:2018-03-27 12:22:37

标签: scala

Scala时间函数测量的Cosider示例:

object MapTimeMeasure {
  def main(args: Array[String]): Unit = {
    val intToString: Int => String = x => s"$x"
    val intToString2: Int => String = time (intToString)
  }
}

摘自here

现在试试这段代码:

Elapsed time

您将在日志中看到time。所以这个时间函数只能用于“现在”测量时间调用。但是如何在没有调用的情况下测量函数的时间?例如。 time只包含函数并仅在{{1}}调用自身时调用包裹的函数而不是时才执行它。如何在scala中执行此操作?

1 个答案:

答案 0 :(得分:0)

在您的示例中,time仅在您定义函数intToString2时被调用一次,但您可能希望每次调用函数时调用time

val intToString: Int => String = x => s"$x"
val intToString2: Int => String = i => time (intToString(i))

你可以编写测量时间的装饰函数

def timeF[A,B](func: A=>B): A=>B = {
  a => time(func(a))
}

val intToString: Int => String = x => s"$x"
val intToString2: Int => String = timeF(intToString)