2010-01-25 15 views
52

En Ruby 1.9 es que hay una manera de definir este hash con la nueva sintaxis?Ruby 1.9 hash con un guión en una clave

irb> { a: 2 } 
=> {:a=>2} 

irb> { a-b: 2 } 
SyntaxError: (irb):5: syntax error, unexpected tLABEL 
{ a-b: 2 } 
    ^

con el anterior, está funcionando:

irb> { :"a-b" => 2 } 
=> {:"a-b"=>2} 

Respuesta

3

También puede utilizar la sintaxis siguiente

{a: 1, b: 2, 'c-c': 3, d: 4} 
+0

¡increíble! +1 para actualizar con la nueva sintaxis de ruby, ¿desde qué versión está disponible? 2? 2.1? – makevoid

+0

No sé, he intentado esta sintaxis y que había trabajado :) – Stiig

+1

@makevoid nueva sintaxis está disponible desde 2.2: https://github.com/ruby/ruby/blob/v2_2_0/NEWS#language-changes –

64

Hay algunos símbolos legítimos que no se pueden utilizar con la nueva sintaxis. No puedo encontrar una referencia, pero parece que se permite un nombre de símbolo que coincida con /^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/ con la nueva sintaxis. ¡El último personaje puede ser el personaje especial "!" o "?"

Para cualquier símbolo que no cumple con estas restricciones, usted tiene que utilizar la sintaxis de Ruby 1.8, :'my-symbol-name'

+1

que tiene sentido; ¿Cómo se supone que el intérprete de Ruby debe leer eso? – Trevoke

+22

Me registré en 'parse.c' y parece que con la nueva sintaxis el símbolo se analiza como token' tLabel'. Y el nombre coincidente es más como/[a-zA-Z _] [a-zA-Z0-9]/:-) – MBO

+0

@MBO, puntos extra para ir a la fuente. He editado la expresión regular en mi respuesta. ¡Gracias! –

22

Puede combinar la vieja y la nueva sintaxis:

{a: 1, b: 2, :'c-c' => 3, d: 4} 
25

Para utilizar guiones con el nuevo sintaxis:

<%= link_to "Link", link_path, {data: {something: 'value1', somethingelse: 'value2'}} %> 

Esto generará:

<a href="/link" data-something='value1' data-somethingelse='value2'>Link</a> 

esto podría no ser exactamente el caso en particular, pero me encontré con este post al tratar de encontrar una respuesta a mí mismo, así que pensé que me gustaría compartir mis hallazgos.

+0

buenas noticias para los puristas :) – prusswan

+0

Niza - esto es exactamente lo que yo estaba tratando de hacer, gracias.! –

+2

AFAIK, esto es específico de los atributos 'data', si tiene otros atributos con guiones, debe usar la sintaxis anterior. – lime

Cuestiones relacionadas