2009-08-01 9 views
17

J'essaie d'utiliser une bibliothèque Java (aucun code source disponible) qui définit certains packages xxx.xxx.object. Scala se plaint de la présence de "object" dans le nom du paquet, donc je ne peux pas l'importer, et je ne peux pas non plus faire référence à ses classes avec un nom complet.Scala: mot clé en tant que nom de package

Y a-t-il un moyen de contourner le problème?

Répondre

28

Envelopper l'objet dans un `(la citation à côté de 1) devrait fonctionner.

xxx.xxx.`object` 
+1

Je remarque que dans 2.8.1.final cela ne fonctionne toujours pas vous aider dans la console - probablement un bug dans le code REPL. L'importation fonctionne correctement, mais essayez d'utiliser l'un des symboles que vous avez importés et il semble que quelque chose ne soit pas échappé en arrière-plan. – spieden

24

Pour terminer l » answeragilefall, le Scala Language Specification mentionne qu'une importation est composé de id:

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

un identifiant peut également être formé par une chaîne arbitraire entre apostrophes (hôte les systèmes peuvent imposer certaines restrictions sur les chaînes qui sont légales pour les identificateurs). L'identifiant est alors composé de tous les caractères à l'exclusion des backquotes eux-mêmes.

Les chaînes renfermées en arrière sont une solution lorsque l'on doit accéder à des identifiants Java qui sont des mots réservés dans Scala.
Par exemple, l'instruction Thread.yield() est illégale, car yield est un mot réservé dans Scala. Cependant, voici un travail autour:

Thread.`yield`() 
+0

Merci ... +1 pour des infos complémentaires –

+0

Existe-t-il un nom plus officiel que "back = quote closed strings"? Quelqu'un sur #Scala a mentionné "backtickling", mais je ne peux pas trouver cela dans Google. –

+0

@AntonyStubbs "Programming in Scala" mentionne aussi "back ticks" (littéral par exemple) – VonC

Questions connexes