Ruby 1.9哈希,键中有一个破折号

时间:2010-01-25 18:49:10

标签: ruby syntax hash 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}

4 个答案:

答案 0 :(得分:64)

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

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

答案 1 :(得分:25)

使用带有新语法的破折号:

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

这将产生:

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

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

答案 2 :(得分:22)

您可以结合旧语法和新语法:

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

答案 3 :(得分:5)

您还可以使用下一个语法

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