我希望将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
每次迭代都有一个,即每个报告.欢迎任何想法在这里.如果需要,我会很乐意提供更多关于我的要求的说明.
常见的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)