Scala lazy val 是否实际评估表达式以在赋值期间获得最终类型
Does Scala lazy val actually evaluates the expression to get the final type during assignment
我是 Scala 的新手。我对 lazy val
在 REPL 中的行为感到困惑。
scala> lazy val a = {println("Hello, World!!!"); 5}
a: Int = <lazy>
scala> a
Hello, World!!!
res0: Int = 5
我可以看到,在 REPL 中,lazy val
a
的类型已在声明后立即正确分配。
现在,我的问题是,Scala 解释器实际上是 lazily 计算表达式,还是只是计算,但不将计算结果值存储到预期变量中。
提前致谢。
Now, my question, is Scala interpreter actually evaluates the expression lazily, or just evaluates, but does not store the evaluated resultant value to the intended variable.
很容易看出它一定是第一个,因为如果是第二个,Hello, World!!!
会被打印两次.
简答:没有。
更长的答案:类型推断算法不需要运行代码,它只需要分析抽象语法树(解析器生成的代码的结构化表示)来推断类型和lazy val
也不例外。
我是 Scala 的新手。我对 lazy val
在 REPL 中的行为感到困惑。
scala> lazy val a = {println("Hello, World!!!"); 5}
a: Int = <lazy>
scala> a
Hello, World!!!
res0: Int = 5
我可以看到,在 REPL 中,lazy val
a
的类型已在声明后立即正确分配。
现在,我的问题是,Scala 解释器实际上是 lazily 计算表达式,还是只是计算,但不将计算结果值存储到预期变量中。
提前致谢。
Now, my question, is Scala interpreter actually evaluates the expression lazily, or just evaluates, but does not store the evaluated resultant value to the intended variable.
很容易看出它一定是第一个,因为如果是第二个,Hello, World!!!
会被打印两次.
简答:没有。
更长的答案:类型推断算法不需要运行代码,它只需要分析抽象语法树(解析器生成的代码的结构化表示)来推断类型和lazy val
也不例外。