Ruby 1.9 хэш с тире в ключе - PullRequest
       51

Ruby 1.9 хэш с тире в ключе

55 голосов
/ 25 января 2010

В ruby ​​1.9 есть способ определить этот хеш с новым синтаксисом?

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

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

со старым, работает:

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

Ответы [ 4 ]

64 голосов
/ 25 января 2010

Есть несколько допустимых символов, которые нельзя использовать с новым синтаксисом. Я не могу найти ссылку, но похоже, что имя символа, соответствующее /^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/, разрешено с новым синтаксисом. Последний символ может быть специальным символом "!" или "?".

Для любого символа, который не соответствует этим ограничениям, вы должны использовать синтаксис Ruby 1.8, :'my-symbol-name'

25 голосов
/ 19 июля 2012

Чтобы использовать тире с новым синтаксисом:

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

Это сгенерирует:

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

Возможно, это не совсем ваш конкретный случай использования, но я нашел этот пост, пытаясь найти ответ сам, поэтому решил поделиться своими выводами.

22 голосов
/ 23 мая 2012

Вы можете объединить старый и новый синтаксис:

{a: 1, b: 2, :'c-c' => 3, d: 4}
6 голосов
/ 27 октября 2016

Вы также можете использовать следующий синтаксис

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