我正在进行这项练习来自" Scala因为不耐烦而且#34;本书,来自章节" Implicits":
根据它们与原点的距离比较类
java.awt.Point
的对象。
我还没有想出更好的东西:
class PointDistOrdered( origin: Point, p1: Point) extends Ordered[Point] {
private def compareDoubles(d1: Double, d2: Double) =
if (d1 < d2) -1
else
if (d1 == d2) 0
else 1
def compare(p2: Point) = compareDoubles(p1.distance(origin), p2.distance(origin))
}
object PointConversions {
def getDistOrder(origin: Point) = (p: Point) => new PointDistOrdered(origin, p)
}
这就是我使用它的方式,这看起来很丑陋:
import PointOrders.getDistOrder
implicit def order = getDistOrder(new Point(0, 0))
有更好的方法吗?
答案 0 :(得分:3)
您不需要创建一个由Point
组成的单独的类,只是为了提供Ordering
隐式(类型类)。
implicit val PointOrdering: Ordering[Point] = new Ordering[Point] {
def compare(a: Point, b: Point): Int = ??? // your impl
}
然后可以使用此比较/排序点,例如使用Sorting
伴随对象。