特定のシナリオでの値クラスまたはケース クラスの使用の違いを発見しようとしています。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
、値クラスで使用できるかどうか、または弾丸を噛んでケースクラスを使用する必要があるかどうかです。