2015-08-29 8 views
0

Я искал источник для Sorting.scala и интересовался определением последнего метода в исходном фрагменте ниже.scala параметризованный тип с ограничением, появляющимся после двоеточия?

object Sorting { 
    /** Quickly sort an array of Doubles. */ 
    def quickSort(a: Array[Double]) { sort1(a, 0, a.length) } 

    /** Quickly sort an array of items with an implicit Ordering. */ 
    def quickSort[K: Ordering](a: Array[K]) { sort1(a, 0, a.length) } //<<?? 

Тип параметра «K», кажется, ограничивается быть подтипом (возможно?) Из «Заказ» ... Но я никогда не видел этот синтаксис.

Я бы своего рода (не каламбур) понять, если методы были определены что-то вроде:

def quickSort[K <% Ordering[K]](a: Array[K]) { sort1(a, 0, a.length) } 

Но я озадачен смыслом ограничения, которое имеет только двоеточие. Любые ссылки на соответствующую документацию или другие (объясненные) примеры были бы замечательными.

Заранее спасибо ...

+0

Заканчивать [Что Scala контекст и просмотреть оценки?] (Https://stackoverflow.com/questions/4465948/what-are-scala-context-and-view-bounds). Границы просмотра устарели. –

ответ

2

Оказывается, это 'Контекст Bound'. Нашел ответ в очень хорошей книге. Теперь я читаю «Программирование Scala». Из главы 5 на неявных аргументов ... Вот пример того, что объясняет, что происходит:

case class MyList[A](list: List[A]) { 
    def sortBy1[B](f: A => B)(implicit ord: Ordering[B]): List[A] = 
    list.sortBy(f)(ord) 

    def sortBy2[B : Ordering](f: A => B): List[A] = 
    list.sortBy(f)(implicitly[Ordering[B]]) 
} 

val list = MyList(List(1,3,5,2,4)) 
list sortBy1 (i => -i) 
list sortBy2 (i => -i) 

Тип параметра B: Заказ называется контекст, связанный. Он подразумевает второй, неявный список аргументов, который принимает экземпляр Ordering [B].

Больше here

+0

Контекстные границы очень часто используются (как в данном случае) с [_type classes_] (http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part-12-type -classes.html) - на самом деле, я бы сказал, типы классов являются причиной, по которой они были введены. – phg

 Смежные вопросы

  • Нет связанных вопросов^_^