2013-10-18 26 views
0
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中的哈希聲明語法錯誤

+0

有人可以解釋其中的問題的一部分,有資格接受downvote? – RubyNoobie

回答

3

我的理解是,{"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. 
2

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

號公報(1)的標準符號,(2)是用於符號密鑰哈希速記1.9語法,(3)是用於 「STR」 .to_sym速記,(4)不存在,你應該使用hashrocket。