2014-09-30 4 views
0

После того как я укрепил мое понимание того, почему параметр в методе является контравариантным положение с SO размещать scala contravariant position on methodСписок :: метод и ковариационной

Я смотрю на список [+ A] в Скале, и я вижу этот метод это хорошо, так как позиция параметра контравариантен

def contains[A1 >: A](elem: A1) 

То, что я не получаю такое определение :: метод, который кажется, что не будет компилировать

def ::(x: A): List[A] 

что такое продолжая этот метод? о, они скрывают настоящую подпись?

def ::[B >: A](x: B): List[B] 

ОК, то почему они скрывают настоящую подпись?

+0

разные стили скаладока, возможно, разными авторами – soulcheck

+1

дубликат http://stackoverflow.com/questions/26089746/how-to-explain-map-map-result посмотреть комментарии о "scaladoc, use cases и damn lies ». –

ответ

2

Записи Scaladoc, отмеченные [use case], представляют собой наиболее распространенные случаи с точки зрения параметров типа, что часто приводит к более простой конструкции для новичков. Если вы расширите это, вы получите полную подпись.

Для типа Foo[+A] можно реализовать методы, которые принимают A -как аргументы, вводя параметр типа B >: A, потому что теперь вы не можете указать значение, которое является подтипом A, который будет нарушать тип-разумность. В большинстве случаев вы добавите List[A] другие элементы типа A, поэтому упростите doc.