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引發語法錯誤?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引發語法錯誤?irb中的哈希聲明語法錯誤
我的理解是,{"key": value}
不是有效的語法,目前尚不清楚是否就意味着{:"key" => value}
或{"key" => value}
有這個here的討論。來自馬茨的討論
| Iff {'key':'value'}的意思是{:key =>'value'}我不反對。
|這不是誤導?但是考慮到{key:「value」} 是{:key = {value}}的簡寫,所以{{key':'value'}意味着{'key'=''value}
{ >「value」},{「key」:「value」}應爲{:「key」=>「value」}的簡寫形式 。除此之外,由於它讓我想起了很多JSON,所以a:和「a」:不同可能會導致比上述誤導更多的混淆。 。
matz.
Hash
:當你的鍵總是符號時,哈希允許一個替代的語法形式。
options = { :font_size => 10, :font_family => "Arial" }
你可以把它寫成:
options = { font_size: 10, font_family: "Arial" }
在你的前3例均處於關鍵地位的符號,但第四個是一個字符串實例,而不是符號實例作爲key.That是的原因第四種情況是無效的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。
有人可以解釋其中的問題的一部分,有資格接受downvote? – RubyNoobie