如何在 Scala 中正确实现类似 class 的自定义数字?

How to correctly implement a custom number-like class in Scala?

我目前正在尝试实现我自己的 UnsignedInt。我想正确地实现它,以便它适合整个 Scala 类型和 class 系统。但是,我真的很困惑所有适合 Number.

的 classes

我需要使用哪个 class(es):NumericIntegralScalaNumber?或者完全不同的东西?我自己的 class 应该实施哪些 class 和 and/or 特征?

简短的回答是:不要实现你自己的,使用 Spire :) 否则,你应该实现 Integral(包括 Numeric)。请注意,您的类型不应该 扩展 它;您需要伴随对象中的隐式值,即

class UnsignedInt { ... }

object UnsignedInt {
  implicit val UIntIntegral: Integral[UnsignedInt] = ...
}

您还应该考虑让您的 class 成为 value class