可能重複:
Is there any difference between the:key => “value”
andkey: “value”
hash notations?哈希語法陌生感
這是什麼之間的區別:
method: :delete
這個?
:method => :delete
我猜它與不同版本的Rails有關,但不知道。我只在Rails 3.x中工作。
可能重複:
Is there any difference between the:key => “value”
andkey: “value”
hash notations?哈希語法陌生感
這是什麼之間的區別:
method: :delete
這個?
:method => :delete
我猜它與不同版本的Rails有關,但不知道。我只在Rails 3.x中工作。
它們是完全等效的,除了第一個只能用於Ruby 1.9以上(當然更高)。
在ruby 1.8中,散列語法使用了=>
,也被稱爲hash rocket
。你可以把任何東西放在前面,而把任何東西放在後面,但前面的東西是你的關鍵,在價值背後。如果你有一個符號作爲鍵,符號爲值,你可以這樣寫:
:method => :delete
但你也可以寫
{ 1 => 'one', :2 => 'two', 'THREE' => 3 }
現在,紅寶石1.9.x的,新的更短的語法是介紹。由於大多數人使用符號作爲鍵,現在可以編寫:
method: :delete
這只是一個較短的/更清潔的版本。另外請注意,可以混合使用這兩種樣式,在某些情況下這是需要的。
E.g.在紅寶石1.8你可以這樣寫:
{ :class => 'smthg', :'data-type' => 'a type' }
這將轉化爲紅寶石以下1.9
{ class: 'smthg', :'data-type' => 'a type' }
請注意,您仍然可以繼續使用「舊」哈希語法爲好。這是一個偏好問題。就個人而言,只使用符號作爲密鑰的散列,我使用乾淨/短版本。我一般儘量不要在一個單一的哈希散列混合式:)
這意味着同樣的事情 – Abram 2012-08-05 20:10:35
以及我八九不離十推斷那麼多,但好奇,爲什麼有兩種不同的方式...?一個看起來像一個類似json的方法::delete和:method =>:delete看起來更像一個rails。在所有rails版本中都可以使用這兩種語法? – botbot 2012-08-05 20:15:08
不需要用Rails做很多事情。這是普通的Ruby。哈希火箭符號從那以後就存在了。 Ruby 1.9引入了冒號語法。 – iltempo 2012-08-05 20:17:27