2014-10-31 16 views
7

Quando scrivo :[email protected] e :[email protected], vengono valutati per :~ e :!, che può essere raggiunto anche scrivendo :~ e :!. Come vengono analizzate queste espressioni e dove è finito lo @?Come sono stati analizzati `: ~ @` e `:! @`?

+1

@engineersmnky, penso che si riferisce a un simbolo. –

+0

Si potrebbe voler notare che ': - @' funziona come previsto ma ':! @' Non funziona e che '- @' è il metodo di annullamento unario ma '! @' Non è un metodo. –

+1

Secondo ruby_parser non va da nessuna parte: 'RubyParser.new.parse (": ~ @ ") # => s (: lit,: ~)' – ThomasSevestre

risposta

1

Ha a che fare con la precedenza nel parser. Un semplice trattino sconfigge la sintassi del colon-mezzo-a-simbolo, troppo:

2.1.2 :004 > c = :test-thing 
NameError: undefined local variable or method `thing' for main:Object 

E 'abbastanza facile da lavorare intorno ad esso, però: provare :'[email protected]',

(Naturalmente, se si può evitare di creare tale un simbolo strano nel tuo codice, che potrebbe essere un'idea migliore ...)

+1

Se viene analizzato in questo modo, non ci sono problemi. Il problema è che viene silenziosamente analizzato come una cosa diversa. E non è un simbolo strano. È un nome di metodo e dovrebbe anche essere il valore di ritorno della definizione del metodo di tale metodo. – sawa

+0

@sawa - Penso certamente che dovrebbe sorgere un errore, come nel mio esempio di 'cosa'. Per "strano" intendevo solo che "@" ha un significato specifico di rubino, il prefisso per un attributo di classe, e come tale immagino che il parser lo tratti come un caso speciale. –

Problemi correlati