通用转换为数字

时间:2017-06-20 08:51:36

标签: scala generics data-conversion

我想编写一个通用转换函数,将Double s序列转换为任何Numeric类,类似于:

  def construct[T : Numeric](a: Seq[Double]): Seq[T] = {
    val n = implicitly[Numeric[T]]
    a.map { value =>
      value
      ???
    }
  }

使用Numeric toDouble,反之亦然,但我找不到如何做这个方向的方法。怎么办?

1 个答案:

答案 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)