Scala实数区间,整数区间

5
我该如何定义一个消除样板的超类,可以应用于这两个简单的Interval类?
class IntInterval(val from: Int, val to: Int) { 
    def mid: Double = (from+to)/2.0 
    def union(other: IntInterval) = IntInterval(from min other.from, to max other.to)
}

class DoubleInterval(val from: Double, val to: Double) { 
    def mid: Double = (from+to)/2.0 
    def union(other: DoubleInterval) = DoubleInterval(from min other.from, to max other.to)
}

我尝试了。
class Interval[T <: Number[T]] (val from: T, val to: T) { 
    def mid: Double = (from.doubleValue+to.doubleValue)/2.0 
    def union(other: IntInterval) = Interval(from min other.from, to max other.to)
}

但是,在联合方法中,minmax没有编译(因为Number[T]没有最小/最大值)。
你能提供一个优雅的超类来处理midunion方法,以一种整洁、避免模板重复编码的方式?
1个回答

4

我认为你正在寻找scala.math.Numeric类型类:

class Interval[T] (val from: T, val to: T)(implicit num: Numeric[T]) { 
  import num.{mkNumericOps, mkOrderingOps}

  def mid: Double  = (from.toDouble + to.toDouble)/2.0 
  def union(other: Interval[T]) = new Interval(from min other.from, to max other.to)
}

嗯。我刚在2.9.2中验证了一下,没有遇到任何问题。你的错误信息是什么?(你是否忘记了 import num... ?) - soc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接