Подтвердить что ты не робот

Какие аннотации Scala изменяют сообщения компилятора?

Я знаю о двух:

  • @deprecated("use blabla instead") используется для добавления объяснения к выходу предупреждения компилятором, когда аннотированное определение используется в клиентском коде.
  • @implicitNotFound(msg = "more meaningful explanation") используется для вывода дополнительного сообщения об ошибке всякий раз, когда неявный тип аннотированного определения не может быть найден. Глядя на CanBuildFrom, msg может содержать заполнители типа ${A}, если A - это имя параметра типа аннотированного типа, которое заполняется компилятором с фактическим ожидаемым типом, например:

    @implicitNotFound(msg = "Cannot construct a collection of type ${To} with elements of type ${Elem} based on a collection of type ${To}.")
    trait CanBuildFrom[-From, -Elem, +To] { ... }
    

Есть ли еще такие аннотации?

4b9b3361

Ответ 1

Существует @migration, который используется с -Xmigration для обозначения семантических изменений в методах из одной версии в другую, помогая использовать код порта между версиями.

@migration(2, 8, "As of 2.8, keys returns Iterable[A] rather than Iterator[A].")

Ответ 2

Существует @tailrec, что заставляет компилятор выводить ошибку, если оптимизация хвостового вызова не может применяться к аннотированному методу.

Ответ 3

Как и в случае с Scala 2.9, также @deprecatedName: "Аннотации, которые обозначают имя параметра, к которому оно применяется, как устаревшее. Использование этого имени в именованном аргументе генерирует предупреждение об устаревании".