据我明白Scala中值类只是有包裹原始类型像Int
或Boolean
成另一种类型,而不会引入额外的内存使用情况。所以它们基本上被用作普通类的轻量级替代品。为什么值类限制为AnyVal?
这让我想起了Haskell的newtype
表示法,该表示法还用于将现有类型封装为新的类型,因此为某些数据引入了一个新的接口而不消耗额外的空间(要查看两种语言的相似性,请考虑例如限制为一个“构造函数”在Haskell和Scala中都有一个字段)。
我想知道的是,为什么引入由编译器内联的新类型的概念并没有被推广到Haskell的任何类型的零开销类型包装的方法。为什么斯卡拉人坚持原始类型(又名AnyVal
)?
还是有已经在斯卡拉的方式也定义了这种包装的Scala.AnyRef
类型?
'扩展AnyVal'只是用来指示值类,以便不引入新的关键字/语法和不会破坏现有的工具。 –