在Scala中传递同一对象的两个方法之间的值

und*_*ood 0 scala

我希望将var/val的值从一个方法传递给另一个方法.
例如,我有

object abc {

  def onStart = {    
    val startTime = new java.sql.Timestamp( new Date())
  }

  def onEnd = {
    //use startTime here 
  }
}
Run Code Online (Sandbox Code Playgroud)

电话:

onStart()  
executeReports(reportName, sqlContexts)  
onEnd()  
Run Code Online (Sandbox Code Playgroud)

这里onStart()onEnd()有作业监控功能executeReports().
executeReports()循环运行5个报告.

我尝试过使用全局变量

object abc{

  var startTime : java.sql.Timestamp = _

  def onStart = {    
    startTime = new java.sql.Timestamp( new Date())
  }

  def onEnd = {
    //use startTime here 
  }

}
Run Code Online (Sandbox Code Playgroud)

但是这个问题是当循环执行下一个报告时,startTime不会改变.

我也试过使用对我来说也不起作用的Singleton Class.

我的要求是startTime每次迭代都有一个,即每个报告.欢迎任何想法在这里.如果需要,我会很乐意提供更多关于我的要求的说明.

Rus*_*ssS 5

常见的Scala解决方案是编写一个包装其他函数并在内部执行设置和关闭的函数.

def timeit[T]( fun: => T ): T = {
  val start = System.currentTimeMillis //Do your start stuff
  val res = fun
  println (s"Time ${System.currentTimeMillis - start}") // Do your end stuff
  res
}
Run Code Online (Sandbox Code Playgroud)