2009-08-01 21 views
17

Ich versuche eine Java-Bibliothek (kein Quellcode verfügbar) zu verwenden, die einige xxx.xxx.object-Paket definiert. Scala beschwert sich über das Vorhandensein von "object" im Paketnamen, daher kann ich nicht davon importieren, und ich kann auch nicht auf seine Klassen mit vollständig qualifizierten Namen verweisen.Scala: Stichwort als Paketname

Gibt es einen Weg um es herum?

Antwort

28

Wrapping das Objekt in einem `(das Zitat neben 1) sollte funktionieren.

xxx.xxx.`object` 
+1

ich in 2.8.1.final bin zu bemerken, dass dies noch nicht, dass Sie in der Konsole nicht möglich ist - wahrscheinlich einen Fehler in dem REPL-Code. Der Import funktioniert einwandfrei, aber versuche eines der importierten Symbole zu verwenden und scheinbar wird etwas nicht im Hintergrund entweichen. – spieden

24

agilefall ‚s answer Zur Vervollständigung erwähnt die Scala Language Specification dass ein Import von id zusammensetzt:

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

eine Kennung auch durch eine beliebige Zeichenkette zwischen Rück Anführungszeichen (host gebildet werden kann, Systeme können Beschränkungen auferlegen, welche Strings für Identifikatoren zulässig sind). Der Bezeichner setzt sich dann aus allen Zeichen ohne die Rückbezeichnungen zusammen.

Backquote-umschlossene Strings sind eine Lösung, wenn auf Java-Bezeichner zugegriffen werden muss, die reservierte Wörter in Scala sind.
Zum Beispiel ist die Aussage Thread.yield() illegal, da yield ein reserviertes Wort in Scala ist. Allerdings ist hier eine Behelfslösung:

Thread.`yield`() 
+0

Danke ... +1 für ergänzende Informationen –

+0

Gibt es einen anderen offiziellen Namen als "back = quote included strings"? Jemand auf #Scala hat "Backtickling" erwähnt, aber ich kann das bei Google nicht finden. –

+0

@AntonyStubbs "Programmierung in Scala" erwähnt auch "Back-Ticks" (zB für Literal) – VonC