Ruby 1.9在密钥中带有破折号

在ruby1.9有没有一种方法来定义这个哈希与新的语法?

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

与旧的,它的工作:

 irb> { :"ab" => 2 } => {:"ab"=>2} 

你也可以使用下一个语法

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

有一些合法的符号不能用于新的语法。 我无法find一个引用,但是看起来符合/^[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> 

这可能不完全是你特定的用例,但我发现这篇文章,而试图自己find答案,所以我想我会分享我的发现。

您可以结合使用新旧语法:

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