私は一般的な数学演算にAzaveaNumericScalaライブラリを使用しています。ただし、これらはScalaコレクションAPIで使用できません。これは、Scala Numericが必要であり、2つのNumericが相互に排他的であるように見えるためです。すべてのタイプに両方の数値のコンテキスト境界があることを要求する以外に、Azavea数値のScalaコレクションですべての数学演算を再実装することを回避できる方法はありますか?
import Predef.{any2stringadd => _, _}
class Numeric {
def addOne[T: com.azavea.math.Numeric](x: T) {
import com.azavea.math.EasyImplicits._
val y = x + 1 // Compiles
val seq = Seq(x)
val z = seq.sum // Could not find implicit value for parameter num: Numeric[T]
}
}
AzaveaNumericが次のように定義されている場合
trait Numeric[@scala.specialized A] extends java.lang.Object with
com.azavea.math.ConvertableFrom[A] with com.azavea.math.ConvertableTo[A] with scala.ScalaObject {
def abs(a:A):A
...remaining methods redacted...
}
object Numeric {
implicit object IntIsNumeric extends IntIsNumeric
implicit object LongIsNumeric extends LongIsNumeric
implicit object FloatIsNumeric extends FloatIsNumeric
implicit object DoubleIsNumeric extends DoubleIsNumeric
implicit object BigIntIsNumeric extends BigIntIsNumeric
implicit object BigDecimalIsNumeric extends BigDecimalIsNumeric
def numeric[@specialized(Int, Long, Float, Double) A:Numeric]:Numeric[A] = implicitly[Numeric[A]]
}