我想上我的案例课Event[K, V]
按键订购K
总是。但我需要能够比较不同值的事件V
。如何解决这种发散的隐式扩展?
import scala.math.Ordering
object Event {
case class Event[K, V](key: K, value: V)
(implicit o: Ordering[K]) extends Ordered[Event[K, _]] {
override def compare(that: Event[K, _]): Int = o.compare(key, that.key)
}
}
object Main extends App {
// mimicking a librarys function
def lala[O](e: O)(implicit ordering: Ordering[O]) = ???
val b = Event.Event("a", 12) <= Event.Event("a", 11.99)
lala(Event.Event("a", 12))
}
致电给lala
由于这种不同的隐式扩展而无法编译:
diverging implicit expansion for type
scala.math.Ordering[Event.Event[String,Int]] starting with method $conforms
in object Predef lala(Event.Event("a", 12))
如果您的库方法需要Ordering
对于您的类型的实例,您应该提供扩展的实例Ordered
,从编译器的角度来看,这是完全低估的。请尝试以下方法:
case class Event[K, V](key: K, value: V)
object Event {
implicit def eventOrdering[K, V](implicit o: Ordering[K]) =
new Ordering[Event[K, V]] {
// ...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)