加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

是否可以使用单个关键字使scala对象中的所有值变为惰性

发布时间:2020-12-16 18:23:52 所属栏目:安全 来源:网络整理
导读:或者 scala对象中的val是否默认为lazy? 无论如何,如果有必要通过使用lazy在一个懒惰的对象中声明一个val,是否可以做类似的事情 lazy object SomeObject 或者(就像你在c中所做的那样) object A {lazy: val a val b ...} 因为我想要懒惰而不必重新标记我所有
或者 scala对象中的val是否默认为lazy?

无论如何,如果有必要通过使用lazy在一个懒惰的对象中声明一个val,是否可以做类似的事情

lazy object SomeObject

或者(就像你在c中所做的那样)

object A {
lazy:
    val a
    val b
    ...
}

因为我想要懒惰而不必重新标记我所有的vals lazy val

解决方法

回答你的第一个问题(“scala对象中的val是默认的懒惰吗?”):不,不完全是,但是对象本身有点懒,可能很懒.从 the Scala language specification的5.4(“对象定义”):

Note that the value defined by an object definition is instantiated
lazily. The new m$cls constructor is evaluated not at the point of
the object definition,but is instead evaluated the first time m is
dereferenced during execution of the program (which might be never at
all).

所以,例如,如果我们有这三个对象:

object X {
  val answer = { println("Here's X's answer!"); 42 }
}

object Y {
  lazy val answer = { println("Here's Y's answer!"); 1 }
}

object Z extends App {
  println("Here we go.")
  println(X)
  println(Y)
  println(X.answer)
  println(Y.answer)
}

然后当我们运行Z时,我们看到以下内容:

Here we go.
Here's X's answer!
X$@38d24866
Y$@f1aa6ce
42
Here's Y's answer!
1

所以X中的val不是懒惰的,但是直到我们第一次使用X时它才被评估.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读