2012-08-05 74 views
0

可能重複:
Is there any difference between the :key => “value” and key: “value” hash notations?哈希語法陌生感

這是什麼之間的區別:

method: :delete 

這個?

:method => :delete 

我猜它與不同版本的Rails有關,但不知道。我只在Rails 3.x中工作。

+0

這意味着同樣的事情 – Abram 2012-08-05 20:10:35

+0

以及我八九不離十推斷那麼多,但好奇,爲什麼有兩種不同的方式...?一個看起來像一個類似json的方法::delete和:method =>:delete看起來更像一個rails。在所有rails版本中都可以使用這兩種語法? – botbot 2012-08-05 20:15:08

+3

不需要用Rails做很多事情。這是普通的Ruby。哈希火箭符號從那以後就存在了。 Ruby 1.9引入了冒號語法。 – iltempo 2012-08-05 20:17:27

回答

0

它們是完全等效的,除了第一個只能用於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' } 

請注意,您仍然可以繼續使用「舊」哈希語法爲好。這是一個偏好問題。就個人而言,只使用符號作爲密鑰的散列,我使用乾淨/短版本。我一般儘量不要在一個單一的哈希散列混合式:)