2012-05-29 7 views

risposta

15

Questa funzione esiste nell'interesse dell'interoperabilità. Se Scala ha una parola riservata (with, ad esempio), allora puoi ancora fare riferimento al codice da altre lingue che lo usano come metodo o variabile o qualsiasi altra cosa, usando i backtick.

Poiché non c'era motivo di vietare stringhe quasi arbitrarie, è possibile utilizzare stringhe quasi arbitrarie.

+2

+1 per dare un * motivo * sul perché i backtick ci sono. – Frank

+0

Ho la sensazione che il caso d'uso degli OP possa essere stato considerato, altrimenti sarebbe necessario un solo simbolo per denotare un identificatore quotato molto simile a come C# lo fa –

+0

@jk. - Solo se il lexing di Scala funziona allo stesso modo di tutti gli altri. Le specifiche JVM consentono quasi qualsiasi cosa come nome di un metodo. Non sono sicuro che Scala sia abbastanza intelligente da controllare sia la sua codifica Java-compatible dei simboli (ad esempio lo spazio diventa $ u0020) sia la versione raw, ma potrebbe essere _ se si scrivesse una lingua che inserisca caratteri non standard nei nomi dei metodi. –

2

Le stringhe avvolte in ` sono identificatori validi in Scala, non solo per nomi di classi e metodi ma anche per funzioni e variabili.

1

Per me è solo che il parser e il compilatore sono stati compilati in un modo che permetta di farlo, così il team di Scala l'ha implementato.

Penso che per un programmatore possa essere bello poter fornire nomi reali alle funzioni anziché getThisIncredibleItem o get_this_other_item.

Grazie per le vostre domande che mi hanno insegnato qualcosa di nuovo in Scala!

5

La Scala Language Specification:

Ci sono tre modi per formare un identificatore. Innanzitutto, un identificatore può iniziare con una lettera che può essere seguita da una sequenza arbitraria di lettere e cifre . Questo può essere seguito da caratteri di sottolineatura '_' e un'altra stringa composta da lettere e cifre o da caratteri operatore . Secondo, un identificatore può iniziare con un operatore seguito da una sequenza arbitraria di caratteri dell'operatore. I due moduli precedenti sono chiamati identificatori semplici. Infine, un identificatore può anche essere formato da una stringa arbitraria tra le virgolette posteriori (i sistemi host possono imporre alcune restrizioni sulle quali le stringhe sono legali per gli identificatori). L'identificatore è quindi composto da tutti i caratteri esclusi i backquotes stessi.

7

Come risposta @Rex Kerr, questa funzione è per l'interoperabilità.Ad esempio,

Per chiamare un metodo Java,

Thread.yield() 

è necessario scrivere

Thread.`yield`() 

dal yield è una parola chiave in scala.

Problemi correlati