Подтвердить что ты не робот

Ruby 1,9 хэш с тире в ключе

В 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}
4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Это будет генерировать:

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

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

Ответ 4

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

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