1

我在同时使用OptionsLazy 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的东西,很有趣但我不能使用它:(

任何帮助!

4

1 回答 1

4

当你执行时:val a = Some(b)你被迫b被评估,因为a需要一个值。如果您不希望延迟评估,您也需要变得b懒惰。

scala> lazy val b = Some(a)
b: Some[Int] = <lazy>
于 2013-08-04T14:02:21.370 回答