【问题标题】:Scala(Lift) lazy val inside Option or BoxOption 或 Box 中的 Scala(Lift) 惰性值
【发布时间】:2013-08-04 22:02:21
【问题描述】:

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

任何帮助!

【问题讨论】:

  • 您可以使用lazy val b: Option[Int]Option[() =&gt; Int]
  • 非常感谢@senia Option[() =&gt; Int] 成功了

标签: scala lift monads lazy-evaluation


【解决方案1】:

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

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

【讨论】:

  • 你是对的,但我必须及早评估选项本身(我必须​​将它传递给按值函数调用)所以我不能使用你的解决方案..一个里面有函数的选项塞尼亚所说的成功了,无论如何谢谢@jcern :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
相关资源
最近更新 更多