【发布时间】:2015-03-10 10:58:47
【问题描述】:
当我第一次听说值类时,我想——终于!现在我可以在没有对象分配的情况下定义我自己的数字类型!但结果比我想象的要难。
我想定义我自己的 Decimal 类型,Dec64 (http://dec64.com/) 或 long-backed decimal 用于快速货币计算。但是,AnyVals 不能扩展 Numeric,因为 Numeric 不是通用特征。我试图跟进Double 的Scala 代码,但它非常复杂,有AnyValCompanion、FractionalProxy 和大量private[scala] 标记代码,以及非常有用的cmets,如不应在用户中扩展代码。
那么,我该如何正确定义我自己的数值类型,它可以与其他 Scala 数字很好地配合使用?
【问题讨论】:
-
这有点模糊。 “玩得好”是什么意思?答案可能是与其他
AnyVals 之间的新类型之间的许多隐式转换。Numeric[YourType]的实例也很有用。 -
这不是你要问的,但我建议看看 Spire,它有许多有用的数字类型的有效实现。如果你想写你自己的,它是基于类型类的,所以更适合与
AnyVal一起使用,而不是基于继承的数字方法。
标签: scala numbers decimal value-class