1

我正在尝试为我的程序中使用的某些类型创建一个包装器。我还希望所有这些类型都通过实现特征 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]

是否有一些我缺少的语法?

4

1 回答 1

4

Ordered不是类型类,而是一个trait,类或其他特征继承自可排序。因此,您不能隐式获取Ordered. 您必须修改您的类型参数以使舒尔A扩展Ordered[A]或可以被视为一个(<%是一个视图绑定,意味着存在从Ato的隐式转换Ordered[A]),然后您可以简单地调用compare

case class Value[A <% Ordered[A]](value: A) extends Ordered[Value[A]] {
  def compare(other: Value[A]) = value compare other.value
}
于 2012-12-03T07:19:58.507 回答