我想编写一个通用转换函数,将Double
s序列转换为任何Numeric
类,类似于:
def construct[T : Numeric](a: Seq[Double]): Seq[T] = {
val n = implicitly[Numeric[T]]
a.map { value =>
value
???
}
}
使用Numeric
toDouble
,反之亦然,但我找不到如何做这个方向的方法。怎么办?
答案 0 :(得分:2)
有n.fromInt(value.toInt)
,但如果您不想失去精确度,那么scala.math.Numeric
就会失败。我建议你实现自己的类型类:
trait Num[T] { def fromDouble(d: Double): T }
object Num { implicit val wateveryouneed = ... }
def construct[T](a: Seq[Double])(implicit n: Num[T]: Seq[T] =
a.map(n.fromDouble)