我试图发现在给定方案中使用值类或案例类之间的差异。假设我想将整数mod 5建模为唯一数据类型。问题是我应该从哪一开始......
class IntegerMod5(val value: Int) extends AnyVal
case class IntegerMod5(value: Int)
无论如何,我似乎可以非常轻松地创建Numeric
的实现。通过案例类方法,我可以简单地这样做:
case class IntegerMod5(value: Int)(implicit ev: Numeric[IntegerMod5]) {
import ev.mkNumericOps
}
然而,使用价值类似乎是一项更加困难的尝试,主要是因为避免创建对象的好处。因此,像
implicit class IntegersMod5Ops(value: IntegerMod5)(implicit ev: Numeric[IntegerMod5]) {
import ev.mkNumericOps
}
似乎在很大程度上打败了目的。 (实际上不确定它是否有效。)
问题是,是否可以将Numeric
与价值类一起使用,或者我必须咬紧牙关并使用案例类?
答案 0 :(得分:1)
您不需要implicit ev: Numeric[IntegerMod5]
作为参数,只需在随播对象中定义它:
object IntegerMod5 {
implicit val numeric: Numeric[IntegerMod5] = ...
}
当您在IntegerMod5
上使用算术运算时会自动拾取它,并且因为它是val
,它只会被初始化一次(您也可以使用object
)。< / p>