在學習Ruby時,我偶爾遇到了「=>」運算符。通常我看到它的在Ruby中「=>」是什麼意思,它是如何工作的?
:symbol => value
形式,它似乎將值傳遞給函數時經常使用。那個操作員叫什麼名字?它是什麼意思?它是否構建在Ruby中,還是像Rails和DataMapper這樣的不同框架添加到符號類中?它是否僅與符號類一起使用?謝謝。
在學習Ruby時,我偶爾遇到了「=>」運算符。通常我看到它的在Ruby中「=>」是什麼意思,它是如何工作的?
:symbol => value
形式,它似乎將值傳遞給函數時經常使用。那個操作員叫什麼名字?它是什麼意思?它是否構建在Ruby中,還是像Rails和DataMapper這樣的不同框架添加到符號類中?它是否僅與符號類一起使用?謝謝。
=>
將鍵與哈希映射文字中的值分開。它不可重載,並且不特別與符號連接。
散列表文字的格式爲{key1 => value1, key2 => value2, ...}
,但當用作函數的最後一個參數時,可以省略大括號。因此,當您看到像f(:a => 1, :b => 2)
這樣的函數調用時,將使用一個參數調用f
,該參數是一個散列映射,其密鑰爲:a
和:b
,值爲1
和2
。
您可能會聽到這個被稱爲「哈希火箭」的運算符,這意味着您在定義紅寶石哈希時使用它。
這是Ruby的Hash文件,如果你不熟悉的:http://www.ruby-doc.org/core/classes/Hash.html
注意,在Ruby 1.9的,如果你定義一個使用符號鍵的哈希,還有現在的可用的替代語法,你:http://blog.peepcode.com/tutorials/2011/rip-ruby-hash-rocket-syntax
如果你想要做的任何進一步的谷歌搜索,=>
有時被稱爲hashrocket,因爲它看起來像一個火箭(在相同的意義上,<=>
看起來像宇宙飛船),並且它在哈希使用。您可以使用SymbolHound。
提示:如果你在哈希使用它像{:a => "A", :b => "B"}
,Ruby 1.9中,你可以使用它像一個JSON哈希:
{
a: "A",
b: "B"
}
除了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中的一個約定,可以讓生活更輕鬆。
欲瞭解更多信息,請參閱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
把大問題分解成小問題。如果你瞭解關聯數組和ruby符號,就不會有任何問題理解哈希。 – karatedog 2011-01-11 23:33:38
所以只是爲了澄清,這裏是從DataMapper的 示例 屬性:title,字符串,:需要=>真,:長度=> 5..200 這是相同 屬性(:title,字符串, {:required => true,:length => 5..200}) ? – 2011-01-12 01:00:50