class Foo
class Bar extends Foo
implicit val ord = new math.Ordering[Foo] {
override defcompare(a: Foo, b: Foo) = 0
}
当试图召唤Bar的Ordering实例时
implicitly[math.Ordering[Bar]]
它以
失败No implicit Ordering defined for Bar.
我希望它能够获取我在Foo上定义的实例。
答案 0 :(得分:3)
简短的回答是,math.Ordering[T]
在T
上不变,因此math.Ordering[Foo]
与math.Ordering[Bar]
无关,即使Bar
是Foo
的子类Ordering[T]
。
您可以为implicit def ord[A <: Foo] = new math.Ordering[A] {
override def compare(a: A, b: A) = 0
}
个实例提供一个隐式工厂来解决这个问题,正如@DaunnC在评论中指出的那样:
{{1}}
答案 1 :(得分:2)
通过@Daunnc:
implicit def ord[A <: Foo] = new math.Ordering[A] { override def compare(a: A, b: A) = 0 }