gpt4 book ai didi

scala - 惰性 val 有什么作用?

转载 作者:行者123 更新时间:2023-12-03 04:07:00 27 4
gpt4 key购买 nike

我注意到 Scala 提供了lazy vals。但我不明白他们在做什么。

scala> val x = 15
x: Int = 15

scala> lazy val y = 13
y: Int = <lazy>

scala> x
res0: Int = 15

scala> y
res1: Int = 13

REPL显示 y 是一个 lazy val,但它与普通 val 有何不同?

最佳答案

它们之间的区别在于,val在定义时执行,而lazy val在第一次访问时执行。

scala> val x = { println("x"); 15 }
x
x: Int = 15

scala> lazy val y = { println("y"); 13 }
y: Int = <lazy>

scala> x
res2: Int = 15

scala> y
y
res3: Int = 13

scala> y
res4: Int = 13

与方法(用def 定义)相比,lazy val 执行一次,然后不再执行。当某个操作需要很长时间才能完成并且不确定以后是否会使用时,这会很有用。

scala> class X { val x = { Thread.sleep(2000); 15 } }
defined class X

scala> class Y { lazy val y = { Thread.sleep(2000); 13 } }
defined class Y

scala> new X
res5: X = X@262505b7 // we have to wait two seconds to the result

scala> new Y
res6: Y = Y@1555bd22 // this appears immediately

这里,当值xy从未被使用时,只有x不必要地浪费资源。如果我们假设 y 没有副作用,并且我们不知道它被访问的频率(从不、一次、数千次),那么将其声明为 def 是没有用的> 因为我们不想多次执行它。

如果您想了解lazy vals是如何实现的,请参阅此question .

关于scala - 惰性 val 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7484928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com