2009-08-01 15 views
17

Estoy tratando de usar una biblioteca Java (no hay código fuente disponible) que defina un paquete de xxx.xxx.object. Scala se queja de la presencia de "objeto" en el nombre del paquete, por lo que no puedo importar desde él, y tampoco puedo referirme a sus clases con el nombre completo.Scala: palabra clave como nombre del paquete

¿Hay alguna forma de evitarlo?

Respuesta

28

Envolver el objeto en un `(la cita al lado de 1) debería funcionar.

xxx.xxx.`object` 
+1

estoy notando en 2.8.1.final que esto todavía no le ayuda en la consola - probablemente un error en el código REPL. La importación funciona bien, pero trate de usar uno de los símbolos que importó y aparentemente algo no se escapa en el fondo. – spieden

24

Para completar agilefall 's answer, la Scala Language Specification menciona que una importación se compone de id:

id ::= plainid 
| ‘\`’ stringLit ‘\`’ 

un identificador también puede estar formada por una cadena arbitraria entre copias de comillas (host los sistemas pueden imponer algunas restricciones sobre qué cadenas son legales para los identificadores). El identificador se compone de todos los caracteres excluyendo las comillas traseras.

Las cadenas encerradas en Backquote son una solución cuando se necesita acceder a los identificadores de Java que son palabras reservadas en Scala.
Por ejemplo, la instrucción Thread.yield() es ilegal, ya que yield es una palabra reservada en Scala. Sin embargo, aquí hay un trabajo en torno a:

Thread.`yield`() 
+0

Gracias ... +1 por información complementaria –

+0

¿Hay un nombre más oficial para el que no sea simplemente "back = quote closed strings"? Alguien en #Scala mencionó "backtickling", pero no puedo encontrar eso en Google. –

+0

@AntonyStubbs "Programación en Scala" también menciona "retrocesos" (por ejemplo, literal) – VonC

Cuestiones relacionadas