2011-01-11 96 views
32

在學習Ruby時,我偶爾遇到了「=>」運算符。通常我看到它的在Ruby中「=>」是什麼意思,它是如何工作的?

:symbol => value 

形式,它似乎將值傳遞給函數時經常使用。那個操作員叫什麼名字?它是什麼意思?它是否構建在Ruby中,還是像Rails和DataMapper這樣的不同框架添加到符號類中?它是否僅與符號類一起使用?謝謝。

回答

39

=>將鍵與哈希映射文字中的值分開。它不可重載,並且不特別與符號連接。

散列表文字的格式爲{key1 => value1, key2 => value2, ...},但當用作函數的最後一個參數時,可以省略大括號。因此,當您看到像f(:a => 1, :b => 2)這樣的函數調用時,將使用一個參數調用f,該參數是一個散列映射,其密鑰爲:a:b,值爲12

+0

欲瞭解更多信息,請參閱Pickaxe [關於Hashes的教程部分](http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/tut_containers.html%23hashes)以及[關於Hashes的參考部分](http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/language.html%23hashes)。請注意,在Ruby 1中。9,你可以在這個`foo:bar`中指定一個Hash中的文字鍵/值對,這個``foo`創建了這個鍵。 – Phrogz 2011-01-11 22:32:38

+0

把大問題分解成小問題。如果你瞭解關聯數組和ruby符號,就不會有任何問題理解哈希。 – karatedog 2011-01-11 23:33:38

+0

所以只是爲了澄清,這裏是從DataMapper的 示例 屬性:title,字符串,:需要=>真,:長度=> 5..200 這是相同 屬性(:title,字符串, {:required => true,:length => 5..200}) ? – 2011-01-12 01:00:50

4

如果你想要做的任何進一步的谷歌搜索,=>有時被稱爲hashrocket,因爲它看起來像一個火箭(在相同的意義上,<=>看起來像宇宙飛船),並且它在哈希使用。您可以使用SymbolHound

4

提示:如果你在哈希使用它像{:a => "A", :b => "B"},Ruby 1.9中,你可以使用它像一個JSON哈希:

{ 
    a: "A", 
    b: "B" 
} 
0

除了In Ruby what does "=>" mean and how does it work?

你會大多請參閱=>以定義函數的參數。把這看作是一個很好的方便:你不需要記住你的參數的正確順序,因爲所有的參數都被包裝成一個巨大的哈希值。所以,如果你有一個像

link_to "My link", my_path, :confirm => "Are you sure?"

一個簡單的輔助方法,這僅僅是因爲你想用一個很少使用的參數比

link_to "My link", my_path, null, null, null, null, "Are you sure?"

方式更好。因此,使用散列傳遞參數僅僅是Ruby/Rails中的一個約定,可以讓生活更輕鬆。