據我明白Scala中值類只是有包裹原始類型像Int
或Boolean
成另一種類型,而不會引入額外的內存使用情況。所以它們基本上被用作普通類的輕量級替代品。爲什麼值類限制爲AnyVal?
這讓我想起了Haskell的newtype
表示法,該表示法還用於將現有類型封裝爲新的類型,因此爲某些數據引入了一個新的接口而不消耗額外的空間(要查看兩種語言的相似性,請考慮例如限制爲一個「構造函數」在Haskell和Scala中都有一個字段)。
我想知道的是,爲什麼引入由編譯器內聯的新類型的概念並沒有被推廣到Haskell的任何類型的零開銷類型包裝的方法。爲什麼斯卡拉人堅持原始類型(又名AnyVal
)?
還是有已經在斯卡拉的方式也定義了這種包裝的Scala.AnyRef
類型?
'擴展AnyVal'只是用來指示值類,以便不引入新的關鍵字/語法和不會破壞現有的工具。 –