Как добавить методы, которые принимают неявное упорядочение в объект коллекции Scala - PullRequest
2 голосов
/ 23 ноября 2011

Я пытаюсь использовать шаблон enrich-my-library с методами коллекций scala с неявным упорядочением.

Учитывая это определение:

object ImplicitTest {
  implicit def RichTraversableOnce[A](t: TraversableOnce[A]): RichTraversableOnce[A] =
    new RichTraversableOnce[A](t)

  class RichTraversableOnce[A](val t: TraversableOnce[A]) {
    def myMinBy[B >: A](f: A => B)(implicit cmp: Ordering[B]): A = {
      if (t.isEmpty)
        throw new UnsupportedOperationException("empty.myMinBy")

      t.reduceLeft((x, y) => if (cmp.lteq(f(x), f(y))) x else y)
    }
  }
}

Как получился этот тест:

 @Test
  def testOrdering {
    import ImplicitTest._
    val mx = List(1, 2, 7, 1, 4, 8, 2, 5, 47, 2, 7).myMinBy(_.toDouble)

    // ...but this works:
    // val mx = List(1, 2, 7, 1, 4, 8, 2, 5, 47, 2, 7).minBy(_.toDouble)

    println(mx)
  }

Дает мне эту ошибку компиляции?

ошибка: не определено неявное упорядочение для AnyVal {def getClass (): java.lang.Class [_>: Int с Double <: AnyVal]}. val mx = Список (1, 2, 7, 1, 4, 8, 2, 5, 47, 2, 7) .myMinBy (_. toDouble) </p>

1 Ответ

4 голосов
/ 23 ноября 2011

Нет никаких причин для вашего B >: A в myMinBy. Отсюда AnyVal, наименьшая верхняя граница для Int и Double. Ваш код работает с myMinBy[B](...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...