57

在 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

4 回答 4

64

有一些合法符号不能与新语法一起使用。我找不到参考,但似乎/^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/新语法允许符号名称匹配。最后一个字符可能是特殊字符“!” 或者 ”?”。

对于任何不符合这些限制的符号,您必须使用 Ruby 1.8 语法,:'my-symbol-name'

于 2010-01-25T19:09:36.050 回答
25

要在新语法中使用破折号:

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

这将产生:

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

这可能不完全是您的特定用例,但我在尝试自己寻找答案时发现了这篇文章,所以我想我会分享我的发现。

于 2012-07-18T23:45:31.410 回答
24

您可以结合新旧语法:

{a: 1, b: 2, :'c-c' => 3, d: 4}
于 2012-05-23T15:15:25.260 回答
11

从 Ruby 2.2 开始,您还可以使用以下语法:

{a: 1, b: 2, 'c-c': 3, d: 4}
于 2016-10-27T07:45:07.743 回答