2010-12-10 5 views
17

lo que sé de dos:¿Qué anotaciones de Scala modifican los mensajes del compilador?

  • @deprecated("use blabla instead") se utiliza para añadir una explicación a la salida de advertencia por el compilador cuando la definición anotada se utiliza en el código de cliente.
  • @implicitNotFound(msg = "more meaningful explanation") se utiliza para generar un mensaje de error adicional cuando no se puede encontrar un implícito del tipo de la definición anotada. En cuanto a CanBuildFrom, msg pueden contener marcadores de posición del tipo ${A} si A es el nombre de un parámetro de tipo del tipo anotada, que se llena en el compilador con el tipo esperado real, por ejemplo:

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

¿Hay alguna otra anotación similar?

+1

¡Hola, gran pregunta! –

+0

@Daniel Voy a secundar ese movimiento ... –

+0

Hmm, una gran pregunta, y la superé, pero es bastante improbable que realmente haya una respuesta aceptable, salvo que alguien en el equipo de Scala haga sonar el int. –

Respuesta

6

Hay @migration, que se usa con -Xmigration para indicar cambios semánticos en los métodos de una versión a otra, para ayudar a codificar el puerto entre las versiones.

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

Hay @tailrec, que hace que el compilador muestre un error si la optimización de la cola de llamada no se puede aplicar al método anotado.

3

A partir de Scala 2.9, también hay @deprecatedName: "Anotación que designa el nombre del parámetro al que se aplica como obsoleto. Usar ese nombre en un argumento con nombre genera una advertencia de desaprobación. "

Cuestiones relacionadas