让我们看录像带,呃,规范 12.2:
值类是其实例不被底层主机系统表示为对象的类。所有值类都继承自类 AnyVal。
所以,也许问题是,如果一切都是对象,我为什么要关心某些东西是否没有表示,即实现为对象?这就是实现细节的实现。
但我们不要假装,你当然在乎。你从来不专攻吗?
规范继续:
Scala 实现需要提供值类 Unit、Boolean、Double、Float、Long、Int、Char、Short 和 Byte(但也可以免费提供其他值)。
因此,对 AnyVal 的测试是有意义的,超出了所需值类的枚举。
也就是说,您必须接受@drexin 的回答,因为如果您没有将值类用于扩展方法,那么您就不是真正的生活。(从某种意义上说,活下去。)
来自 SIP 的动机:
... Scala 中的类可以完全内联,因此与外部方法相比,对这些类的操作开销为零。内联类的一些用例是:
- 内联隐式包装器。这些包装器上的方法将被转换为扩展方法。
- 新的数值类,例如无符号整数。这样的类将不再需要装箱开销。所以这类似于 .NET 中的值类。
- 表示度量单位的类。同样,这些类不会产生装箱开销。
您可以将扩展方法本身标记为@inline,并且所有内容都是内联的:没有对象包装器并且您的小方法是内联的。
我每天都使用这个功能。昨天我遇到了一个错误。该错误已经修复。也就是说,这是一个非常酷的功能,Scala 的人会从 Coursera 抽出时间来消除其中的一个小错误。
这提醒了我,我忘了问,这不是 Coursera 测验问题,是吗?