我正在尝试为我的程序中使用的某些类型创建一个包装器。我还希望所有这些类型都通过实现特征Ordered [T]来获得比较方法。我在制作比较方法时遇到问题,该方法确定被隐式比较的类型实现了Ordred [T]。
当前尝试:
case class Value[T](someType: T) extends Ordered[T] {
def matches(otherType: T): Boolean = {
if(someType.getClass == otherType.getClass)
true
else false
}
override def toString() = {
someType.toString
}
def compare(other: T): Int = {
implicitly[Ordered[T]] compare other
}
}
object Value {
implicit def intVal(some: Int) = new Value[Int](some) {
def compare(other: Int): Int = someType compare other
}
implicit def doubleVal(some: Double) = new Value[Double](some) {
def compare(other: Double): Int = someType compare other
}
implicit def stringVal(some: String) = new Value[String](some) {
def compare(other: String): Int = someType compare other
}
implicit def boolVal(some: Boolean) = new Value[Boolean](some) {
def compare(other: Boolean): Int = someType compare other
}
implicit def dateVal(some: Date) = new Value[Date](some) {
def compare(other: Date): Int = someType.compareTo(other)
}
}
这是我想要的结构,但我一直收到错误:
Could not find value for implicit parameter e: Ordered[T]
是否有一些我缺少的语法?
答案 0 :(得分:4)
Ordered
不是类型类,而是trait
,类或其他特征继承自可订购。因此,您无法隐式获取Ordered
的实例。您必须修改类型参数以使shure成为A
扩展Ordered[A]
或者可以将其视为一个(<%
是视图边界,并且意味着存在来自{{1的隐式转换然后你可以简单地调用A
:
Ordered[A]