Scala:值类与用例类



我试图发现在给定场景中使用值类和事例类之间的区别。假设我想将整数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与值类一起使用,或者我是否必须咬紧牙关使用case类?

您不需要implicit ev: Numeric[IntegerMod5]作为参数,只需在配套对象中定义即可:

object IntegerMod5 {
  implicit val numeric: Numeric[IntegerMod5] = ...
}

当您对IntegerMod5 s使用算术运算时,它将自动拾取,因为它是val,所以它只初始化一次(您也可以使用object)。

相关内容

  • 没有找到相关文章

最新更新