Scala(Lift)lazy val在Option或Box中

时间:2013-08-04 13:46:15

标签: scala lift monads lazy-evaluation

我在使用选项懒惰评估时遇到了一个小问题。 例如,当我在REPL中尝试此代码时,我得到了以下内容

lazy val a = 3+3

REPL说:

a: Int = <lazy>

这很酷,但是..

val b = Some(a)

REPL说:

b: Some[Int] = Some(6)

在将其置于选项之前,某些必须评估参数 :(

val b = Box !! a

评估为

b: net.liftweb.common.Box[Int] = Full(6)

同样的效果:(

是否有任何解决方法,我只需要一个带有懒惰val的选项,如果我可以实现以下它会很棒

b: Some[Int] = Some(<lazy>)

注意:

我在询问之前做了一些研究,我发现 scalaz 有一些叫做 LazyOption 的东西,很有趣,但我无法使用它:(

任何帮助!

1 个答案:

答案 0 :(得分:4)

执行:val a = Some(b)时,由于b需要值,因此您要强制a进行评估。如果您不希望延迟评估,则还需要使b懒惰。

scala> lazy val b = Some(a)
b: Some[Int] = <lazy>