gpt4 book ai didi

scala - Scala 中的 `def` 与 `val` 与 `lazy val` 评估

转载 作者:行者123 更新时间:2023-12-03 05:34:38 25 4
gpt4 key购买 nike

我的理解正确吗

  • def 每次被访问时都会被评估

  • lazy val 一旦被访问就会被评估

  • val 一旦进入执行范围就会被评估?

最佳答案

是的,但有一个不错的技巧:如果您有惰性值,并且在第一次评估期间它将出现异常,下次您尝试访问它时将尝试重新评估自身。

这里是示例:

scala> import io.Source
import io.Source

scala> class Test {
| lazy val foo = Source.fromFile("./bar.txt").getLines
| }
defined class Test

scala> val baz = new Test
baz: Test = Test@ea5d87

//right now there is no bar.txt

scala> baz.foo
java.io.FileNotFoundException: ./bar.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:137)
...

// now I've created empty file named bar.txt
// class instance is the same

scala> baz.foo
res2: Iterator[String] = empty iterator

关于scala - Scala 中的 `def` 与 `val` 与 `lazy val` 评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449474/

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