我想不出任何 AnyVal
类型会有用的情况,尤其是添加了 Numeric
类型以对 Int
、 Long
等进行抽象。 AnyVal
是否有任何实际用例,或者它只是一个使类型层次结构更漂亮一点?
澄清一下,我知道 AnyVal
是什么,我只是想不出任何时候我会在 Scala 中真正需要它。我什么时候需要包含 Int
、 Character
和 Double
的类型?似乎只是在使类型层次结构更漂亮了(即让AnyVal
和AnyRef
作为同级而不是直接从Int
继承Character
,Any
等看起来更好)。
最佳答案
让我们去看录像带,呃,规范 12.2:
所以,也许问题是,如果一切都是一个对象,我为什么要关心某些东西是否没有被表示,即实现为一个对象?这就是实现细节中的实现。
但我们不要假装,你当然关心。你从来不专精吗?
规范继续:
因此,对 AnyVal 的测试是有意义的,超出了所需值类的枚举。
也就是说,您必须接受@drexin 的回答,因为如果您没有将值类用于扩展方法,那么您就不是真的活着。 (从某种意义上说,活出它。)
SIP 的动机:
您可以将扩展方法本身标记为 @inline 并且所有内容都是内联的:没有对象包装器并且您的小方法是内联的。
我每天都在使用这个功能。昨天我遇到了一个错误。该错误已经修复。也就是说,这是一个很酷的功能,Scala 的人会从 Coursera 抽出时间来解决它的一个小错误。
这提醒了我,我忘了问,这不是 Coursera 测验问题,是吗?
关于scala - AnyVal 的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12655028/