![](/img/trans.png)
[英]IRB - Ruby 1.9.x hash syntax: {if: true} is not equal to {:if => true}
[英]Hash declaration syntax error in irb
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抛出语法错误?
我的理解是{"key": value}
不是有效的语法,因为尚不清楚它是指{:"key" => value}
还是{"key" => value}
有关于这个的讨论在这里 。 在讨论中引用Matz的话
| Iff {'key':'value'}的意思是{:key =>'value'}我没有异议。
| 那会不会引起误解? 我认为OP希望{'key':'value'}表示{'key'=>'value}
但是考虑到{key:“ value”}是{:key =>“ value”}的简写的事实,{“ key”:“ value”}应该是{:“ key” =>“ value”的简写}。 除此之外,由于它使我想起JSON太多了,所以将a:和“ a”:设置为不同的名称可能会比上述误解引起更多的混乱。
matz.
Hash
:当您的键始终是符号时, Hash
允许使用另一种语法形式。
options = { :font_size => 10, :font_family => "Arial" }
您可以将其编写为:
options = { font_size: 10, font_family: "Arial" }
在您的前3种情况下,所有字符都位于键位置,但是在第4种情况下是字符串实例,而不是作为键的符号实例。这就是第4种情况是无效的Ruby语法的原因。
{ :a => 10 }.keys[0].class # => Symbol
{ a: 10 }.keys[0].class # => Symbol
{ :"str" => 10 }.keys[0].class # => Symbol
否。(1)是标准符号,(2)是符号键哈希的简写1.9语法,(3)是“ str” .to_sym的简写,(4)不存在,您应该使用hashrocket。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.