Per farla breve, stavo scrivendo un metodo che includeva un argomento di opzioni, che farà certe cose se il valore per la chiave: if, valutato su true. Quando ho provato la hash nella IRB utilizzando la nuova sintassi ho ottenuto un errore di sintassi nella IRB, i soggiorni Aprire il prompt:IRB - Sintassi hash di Ruby 1.9.x: {if: true} non è uguale a {: if => true}
1.9.3p374 :010 > {if: true}
1.9.3p374 :011?>
Utilizzando la vecchia sintassi, funziona bene:
1.9.3p374 :011 > {:if => true}
=> {:if=>true}
Tutte le parole chiave che iniziare una dichiarazione, esibire lo stesso comportamento. Per esempio. def
, do
, module
, case
Altre parole riservate che si verificano nel mezzo e class
funzionano bene: else
, end
La mia domanda è: È questo il comportamento previsto, un bug o una limitazione?
'irb' è un po 'fragile e ha una discreta quantità di danni al cervello, probabilmente stai vedendo un po' di quello. –
@muistooshort che sembra piuttosto infondato. 'echo 'mette {if: true} .inspect'> test.rb; ruby test.rb' restituisce: 'test.rb: 1: errore di sintassi, imprevisto ':'' In che modo è 'irb' fragile? – nzifnab
@nzifnab Irb deve tenere a bada l'esecuzione dell'istruzione fino alla fine, e se interpreta erroneamente un operatore di controllo (come fa qui) ci sono altri problemi esclusivi. – coreyward