Почему сигнатуры скалярного метода неверны?

scala scaladoc

654 просмотра

1 ответ

В Scala API есть много мест , особенно в коллекциях, где сигнатуры методов неверны.

Например, подпись скаладока для карты . flatMapговорит

def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): Map[B]

Но фактическая подпись

flatMap[B, That](f: ((A, B)) ⇒ GenTraversableOnce[B])
    (implicit bf: CanBuildFrom[Map[A, B], B, That]): That

Это особенно бессмысленно, поскольку сигнатура скаладока включает Map[B], но Mapимеет два параметра типа, а не один.

Что тут происходит? Это ошибка?

Автор: Chris Martin Источник Размещён: 13.11.2019 11:34

Ответы (1)


13 плюса

Решение

Неправильные подписи, которые вы видите в сгенерированной документации, называются «вариантами использования». Предполагается, что они должны прояснить документацию, показав идеализированный API, похожий на настоящий, но пропуская утомительные детали (например, распространенный неявный CanBuildFromпараметр, который беспокоит некоторых людей ).

Для методов со сценариями использования вы можете получить реальную подпись, щелкнув имя метода, чтобы отобразить подробности этого метода, а затем нажав «Полная подпись», чтобы развернуть другой раздел, в котором показана подпись.

Рекомендации

  • В выпуске Scala SI-3448 , созданном в мае 2010 года, конкретно рассматривается неправильное количество отображаемых параметров типа Map. Этот выпуск закрыт как "Не исправлю" в июле 2012 года.

  • Выступление Пола Филлипса Scala Collections: почему бы и нет? начиная с января 2014 года, варианты использования «лежат» на слайде 1 , слайде 2 , слайде 3 .

  • В GenTraversableLike.scala вы можете увидеть пример директивы, которая вызывает генерацию документации варианта использования:

    @usecase def flatMap[B](f: A => TraversableOnce[B]): $Coll[B]
    

Похожие вопросы

Автор: Chris Martin Размещён: 01.10.2014 12:47
Вопросы из категории :
32x32