【发布时间】:2012-05-13 07:17:01
【问题描述】:
我有以下通用 Interval 类(由用户 soc 为我制定):
case class Interval[T](from: T, to: T)(implicit num: Numeric[T]) {
import num.mkNumericOps // allows us to write from.toDouble and to.toDouble
def mid: Double = (from.toDouble + to.toDouble) / 2.0
}
典型用例:Interval[Double] 或 Interval[Int]。要添加二元 union 和 intersection 运算符,我遵循了类似的模式,在伴随对象中使用 (implicit num: Numeric[T]):
object Interval {
def union[T](interval1: Interval[T], interval2: Interval[T])(implicit num: Numeric[T]) = {
import num.mkOrderingOps // allows interval1.from min
Interval[T](interval1.from min interval2.from, interval1.to max interval2.to)
}
def intersect[T](interval1: Interval[T], interval2: Interval[T])(implicit num: Numeric[T]) = {
import num.mkOrderingOps
Interval[T](interval1.from max interval2.from, interval1.to min interval2.to)
}
}
在这两种方法中复制(implicit num: Numeric[T]) 和import num.mkOrderingOps 是丑陋的样板。有没有办法在 Interval 对象本身的级别上只执行一次?
【问题讨论】:
标签: scala numeric implicit-conversion implicit implicits