web-dev-qa-db-fra.com

Ruby 1.9 hachage avec un tiret dans une clé

In Ruby 1.9 est-il un moyen de définir ce hachage avec la nouvelle syntaxe?

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

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

avec l'ancien, ça marche:

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

Vous pouvez également utiliser la syntaxe suivante

{a: 1, b: 2, 'c-c': 3, d: 4}
7
Stiig

Certains symboles légitimes ne peuvent pas être utilisés avec la nouvelle syntaxe. Je ne trouve pas de référence, mais il semble qu'un nom de symbole correspondant /^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/ est autorisé avec la nouvelle syntaxe. Le dernier caractère peut être le caractère spécial "!" ou "?".

Pour tout symbole qui ne répond pas à ces restrictions, vous devez utiliser le Ruby 1.8 Syntaxe, :'my-symbol-name'

64
Wayne Conrad

Pour utiliser des tirets avec la nouvelle syntaxe:

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

Cela générera:

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

Ce n'est peut-être pas exactement votre cas d'utilisation particulière, mais j'ai trouvé ce post tout en essayant de trouver une réponse moi-même donc je pensais partager mes conclusions.

25
Nate

Vous pouvez combiner l'ancienne et la nouvelle syntaxe:

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