Scala:我如何替换懒惰并保存我的功能?

时间:2015-11-19 14:03:27

标签: scala

我有一个简单的代码:

def task(t: => Int): Unit = t

lazy val tsk = {
  println(2)
  throw new RuntimeException
}

task {
  {
    println(1) // additional job
    tsk
  }
}

如果我让我的val不懒,则会打印2stacktrace。为了保持额外的工作,我需要让我的懒惰。我想避免它。是否有可能只使用val并打印21stacktrace

PS

我可以用def替换它,并获得我需要的行为。

def tsk = {...}

但我想在这里使用val

1 个答案:

答案 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
  }
}