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 `:! @`?
risposta
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 ...)
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
@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. –
- 1. argomenti siano stati analizzati posizionali
- 2. Come sono stati fatti i livicons?
- 3. Come verificare quali passaggi sono stati utilizzati
- 4. Come sono stati implementati "diecimila centesimi"?
- 5. Come vengono analizzati i modelli di Django?
- 6. Come rinominare i file analizzati da Formidable?
- 7. Come vengono analizzati gli attributi in Boost.PropertyTree?
- 8. avvertimenti cbind: i nomi di riga sono stati trovati da una variabile breve e sono stati scartati
- 9. Perché equals e hashCode sono stati definiti in Object?
- 10. perché JUnit MethodRule e TestWatchman sono stati deprecati?
- 11. Perché Equals() e == sono stati progettati per essere diversi?
- 12. macchine a stati e stati multipli
- 13. I test unitari sono sempre stati interrotti
- 14. controlli Checkstyle non sono stati ignorati
- 15. Recupero metodi integrati che sono stati sovrascritti
- 16. ipad detect quando UIPopoverControllers sono stati scaricati
- 17. Quali sono gli stati del thread Dalvik?
- 18. Quali aggiornamenti rapidi Tridion sono stati applicati?
- 19. I video PDC 2009 sono stati rilasciati?
- 20. Alcuni pacchetti sono stati trovati ma non sono aggiornamenti compatibili
- 21. Come sapere quali pacchetti sono stati utilizzati in R
- 22. Come posso verificare quali commit non sono stati inviati all'origine?
- 23. Come rimuovere elementi che sono stati recuperati usando querySelectorAll?
- 24. Come evitare TagManager "IllegalStateException: i risultati sono già stati impostati"
- 25. Visual Studio 2010 - non sono stati eseguiti test perché non sono stati caricati test o i test selezionati sono stati disabilitati.
- 26. Come posso recuperare oggetti nell'ordine in cui sono stati creati?
- 27. Python: come ricaricare i moduli che sono stati importati con *
- 28. Come scoprire quali eventi JavaScript sono stati attivati?
- 29. Come Python chiude i file che sono stati gc?
- 30. Ci sono (ci sono stati) sforzi per creare un linguaggio schema per formati binari arbitrari?
@engineersmnky, penso che si riferisce a un simbolo. –
Si potrebbe voler notare che ': - @' funziona come previsto ma ':! @' Non funziona e che '- @' è il metodo di annullamento unario ma '! @' Non è un metodo. –
Secondo ruby_parser non va da nessuna parte: 'RubyParser.new.parse (": ~ @ ") # => s (: lit,: ~)' – ThomasSevestre