我有一个简单的代码:
def task(t: => Int): Unit = t
lazy val tsk = {
println(2)
throw new RuntimeException
}
task {
{
println(1) // additional job
tsk
}
}
如果我让我的val
不懒,则会打印2
和stacktrace
。为了保持额外的工作,我需要让我的懒惰。我想避免它。是否有可能只使用val并打印2
,1
和stacktrace
?
PS
我可以用def
替换它,并获得我需要的行为。
def tsk = {...}
但我想在这里使用val
。
答案 0 :(得分:2)
如果您使用此初始化程序“只有val
”,初始化程序将运行并抛出异常:val
意味着。
您可以将tsk
的类型更改为() => Int
:
def task(t: => Int): Unit = t
val tsk = () => {
println(2)
throw new RuntimeException
}
task {
{
println(1) // additional job
tsk()
}
}
或将其隐藏在object
中,这是懒惰地初始化:
def task(t: => Int): Unit = t
object Tsk {
val x = {
println(2)
throw new RuntimeException
}
}
import Tsk._
task {
{
println(1) // additional job
x
}
}