【发布时间】:2012-11-26 16:06:03
【问题描述】:
据我了解,Scala 中的值类只是将 Int 或 Boolean 等原始类型包装成另一种类型,而不会引入额外的内存使用。所以它们基本上被用作普通类的轻量级替代品。
这让我想起了 Haskell 的 newtype 表示法,它也用于将现有类型包装在新类型中,从而在不占用额外空间的情况下为某些数据引入新接口(要查看两种语言的相似性,请考虑例如限制一个“构造函数”,在 Haskell 和 Scala 中都有一个字段。
我想知道为什么引入由编译器内联的新类型的概念没有推广到 Haskell 为任何类型提供零开销类型包装器的方法。为什么 Scala 的人在这里坚持使用原始类型(又名 AnyVal)?
或者 Scala 中是否已经有一种方法可以为 Scala.AnyRef 类型定义此类包装器?
【问题讨论】:
-
extends AnyVal仅用于表示值类,以免引入新的关键字/语法,也不会破坏现有工具。
标签: scala haskell wrapper primitive-types newtype