1. { :a => 10 } #=> no error
2. { a: 10 } #=> no error
3. { :"str" => 10 } #=> no error
4. { "str": 10 } #=> syntax error, unexpected ':', expecting =>
不是4.和2相同吗?为什么2正在运行而4抛出语法错误?
答案 0 :(得分:3)
我的理解是{"key": value}
不是有效的语法,因为不清楚它是否意味着{:"key" => value}
或{"key" => value}
对此here进行了讨论。引自Matz的讨论
| Iff {'key':'value'}表示{:key => '价值'}我没有异议。
|这不会误导吗?我认为OP希望{'key':'value'}表示{'key'=> “值}
但考虑到{key:“value”}这一事实 是{:key =>的简写“value”},{“key”:“value”}应该是一个 {:“key”=>的简写“值”}。除此之外,因为它让我想起了 JSON这么多,使得:和“a”:不同可能会导致更多混乱 比上述误导。
matz.
答案 1 :(得分:2)
Hash
:当您的密钥始终为符号时,哈希允许使用其他语法格式。
options = { :font_size => 10, :font_family => "Arial" }
你可以把它写成:
options = { font_size: 10, font_family: "Arial" }
在前三种情况下,所有都是键位置的符号,但第四种是字符串实例,而不是符号实例作为键。这就是第四种情况是无效的Ruby语法的原因。
{ :a => 10 }.keys[0].class # => Symbol
{ a: 10 }.keys[0].class # => Symbol
{ :"str" => 10 }.keys[0].class # => Symbol
答案 2 :(得分:1)
没有。 (1)是标准符号,(2)是符号键哈希的简写1.9语法,(3)是“str”的缩写.to_sym,(4)不存在,你应该使用hashrocket。