我想不出任何 AnyVal 类型会有用的情况,尤其是添加了 Numeric 类型以对 IntLong 等进行抽象。 AnyVal 是否有任何实际用例,或者它只是一个使类型层次结构更漂亮一点?

澄清一下,我知道 AnyVal 是什么,我只是想不出任何时候我会在 Scala 中真正需要它。我什么时候需要包含 IntCharacterDouble 的类型?似乎只是在使类型层次结构更漂亮了(即让AnyValAnyRef作为同级而不是直接从Int继承CharacterAny等看起来更好)。

最佳答案

让我们去看录像带,呃,规范 12.2:



所以,也许问题是,如果一切都是一个对象,我为什么要关心某些东西是否没有被表示,即实现为一个对象?这就是实现细节中的实现。

但我们不要假装,你当然关心。你从来不专精吗?

规范继续:



因此,对 AnyVal 的测试是有意义的,超出了所需值类的枚举。

也就是说,您必须接受@drexin 的回答,因为如果您没有将值类用于扩展方法,那么您就不是真的活着。 (从某种意义上说,活出它。)

SIP 的动机:



您可以将扩展方法本身标记为 @inline 并且所有内容都是内联的:没有对象包装器并且您的小方法是内联的。

我每天都在使用这个功能。昨天我遇到了一个错误。该错误已经修复。也就是说,这是一个很酷的功能,Scala 的人会从 Coursera 抽出时间来解决它的一个小错误。

这提醒了我,我忘了问,这不是 Coursera 测验问题,是吗?

关于scala - AnyVal 的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12655028/

10-10 12:55