簡體   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