Ответ 1
Вы также можете использовать следующий синтаксис
{a: 1, b: 2, 'c-c': 3, d: 4}
В 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}
Вы также можете использовать следующий синтаксис
{a: 1, b: 2, 'c-c': 3, d: 4}
Есть некоторые законные символы, которые нельзя использовать с новым синтаксисом. Я не могу найти ссылку, но похоже, что с новым синтаксисом разрешено совпадение символа /^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/
. Последним персонажем может быть специальный символ "!" или "?".
Для любого символа, который не соответствует этим ограничениям, вы должны использовать синтаксис Ruby 1.8, :'my-symbol-name'
Чтобы использовать тире с новым синтаксисом:
<%= link_to "Link", link_path, {data: {something: 'value1', somethingelse: 'value2'}} %>
Это будет генерировать:
<a href="/link" data-something='value1' data-somethingelse='value2'>Link</a>
Это может быть не совсем ваш конкретный случай использования, но я нашел этот пост, пытаясь найти ответ, поэтому я решил поделиться своими выводами.
Вы можете комбинировать старый и новый синтаксис:
{a: 1, b: 2, :'c-c' => 3, d: 4}