【发布时间】:2013-08-04 22:02:21
【问题描述】:
我在使用 Options 和 Lazy Evaluation 时遇到了一个小问题。 例如,当我在 REPL 中尝试此代码时,我得到了以下结果
lazy val a = 3+3
REPL 说:
a: Int = <lazy>
这很酷,但是..
val b = Some(a)
REPL 说:
b: Some[Int] = Some(6)
看起来 Some 必须在将参数放入 Option 之前评估参数 :(
还有
val b = Box !! a
评估为
b: net.liftweb.common.Box[Int] = Full(6)
同样的效果:(
是否有任何解决方法,我只需要一个带有惰性 val 的选项,如果我能实现以下效果,那就太好了
b: Some[Int] = Some(<lazy>)
注意:
我在问之前做了一些研究,我发现 scalaz 有一个叫做 LazyOption 的东西,很有趣但我不能使用它:(
任何帮助!
【问题讨论】:
-
您可以使用
lazy val b: Option[Int]或Option[() => Int]。 -
非常感谢@senia
Option[() => Int]成功了
标签: scala lift monads lazy-evaluation