繁体   English   中英

为什么Scala Vals默认不偷懒

[英]Why are scala Vals not lazy by default

我注意到,我几乎只使用lazy val赋值,因为它们经常避免不必要的计算,而且我看不到很多情况下希望这样做(依赖于可变变量是一个明显的例外)。

在我看来,这是函数式编程的一大优点,应该鼓励在可能的情况下使用它,并且,如果我正确理解的话,Haskell默认情况下正是这样做。

那么,为什么默认情况下Scala值不偷懒? 是否仅是为了避免与可变变量有关的问题?

Scala和Haskell之间的最大区别是Scala允许副作用,而Haskell不允许。

懒惰会导致一种语言出现各种问题,这种语言会在程序的任意点产生副作用,因为副作用发生的顺序不确定。

几乎透明的Java互操作性在Scala的设计中扮演着重要角色,并且Java库通常充满副作用。

Scala是一种严格的语言。 懒惰不仅与值有关,而且与评估策略有关。 应该调用函数之前对函数的参数求值(如果不使用该参数怎么办?)? 在Scala中(就像大多数其他语言一样)。 此策略可扩展到其他上下文,包括val和vars。

打破此规则的val会很尴尬,但是懒惰可能会有用,可以作为选择加入。

如您所述,对可变变量的依赖与延迟求值不兼容。 请注意,scala是JVM语言,Scala程序经常使用Java库,但根本不起作用。 默认情况下,惰性会导致Java库出现很多问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM