Я просто посмотрел на объявление метода List::map
и был растерян от его осложнений. Вот как это выглядит:Как понять Список :: объявление карты в scala?
final override def map[B, That](f: A => B)(implicit bf: CanBuildFrom[List[A], B, That]): That = {
Ну, я понимаю, что implicit
есть (насколько я получил, класс типа на основе признака CanBuildFrom
будет автоматически введен компилятором, если в области видимости). Но что означает здесь That
?
Я понимаю map(f: A => B)
как функторном вещь, которая отображает каждую функцию f: A => B
к функции между соответствующим Монадическими значениями от List(A)
и List(B)
. Поэтому я ожидал, что тип возврата будет List[B]
.
BTW, это то, что мы на самом деле имеем в случае Option
.
def map[B](f: A => B): Option[B]
Оба List
и Option
являются монады. Что такое трюк с List
?
связанный: [Является ли библиотека коллекций Scala 2.8 примером «самой длинной записки о самоубийстве в истории»?] (Http://stackoverflow.com/questions/1722726/is-the-scala-2-8-collections- library-a-case-of-the-longest-suicide-note-in-hist) – stholzm
'Это' просто параметр типа. Они могли бы выбрать 'C', или' T', или что-то еще. 'That' часто выбирается для имени типа вывода, так что' this' становится 'That'. – jwvh
@stella Эй, просто проверяя, разрешено ли это – slouc