Какие аннотации Scala изменяют сообщения компилятора? - PullRequest
17 голосов
/ 10 декабря 2010

Я знаю о двух:

  • @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] { ... }
    

Есть ли другие подобные аннотации?

Ответы [ 3 ]

6 голосов
/ 10 декабря 2010

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

6 голосов
/ 10 декабря 2010

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

@migration(2, 8, "As of 2.8, keys returns Iterable[A] rather than Iterator[A].")
3 голосов
/ 14 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...