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

17

Я знаю о двух:

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

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

    
задан Jean-Philippe Pellet 10.12.2010 в 16:35
источник
  • Эй, отличный вопрос! –  Daniel C. Sobral 10.12.2010 в 17:49
  • @ Даниэль Я запомню это движение ... –  Kevin Wright 10.12.2010 в 23:22
  • Хм, отличный вопрос, и я его поддержал, но маловероятно, что на самом деле будет приемлемый ответ, заставив кого-то из команды Scala пробить int. –  Dave Griffith 12.12.2010 в 03:36

3 ответа

6

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

@migration(2, 8, "As of 2.8, keys returns Iterable[A] rather than Iterator[A].")
    
ответ дан Daniel C. Sobral 10.12.2010 в 17:45
6

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

    
ответ дан Kim Stebel 10.12.2010 в 20:40
3

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

    
ответ дан Jean-Philippe Pellet 14.05.2011 в 15:32