我有一系列容器,形式为
trait Value {
type Internal
implicit def order:Internal => Ordering[Internal]
def value:Internal
}
我希望能够使用Internal类型的顺序定义Value的特定子类型的排序,例如:
object Value {
implicit def order[V <: Value]:Ordering[V] = Ordering((_:V).value)
}
但是,编译器说V#Internal没有隐式排序,即使在特征中指定了这样的排序。
有没有办法实现我想要做的事情?
答案 0 :(得分:2)
您需要Internal
上的类型约束,以确保它具有Ordering
。如果您将Value
定义为class
:
abstract class Value[Internal: Ordering] {
def value: Internal
}
作为一种特质,我认为不可能直接应用这样的约束,但您可以要求提供合适的Ordering
:
trait Value {
type Internal
def value: Internal
implicit val ord: Ordering[Internal]
}
并用作
class Foo extends Value {
type Internal = Int
def value = 42
implicit val ord = Ordering[Internal] // Ordering's apply method
}