2014-10-07 33 views
0

我發現哈希分配代碼,如下:這個散列的定義是如何工作的?

@defeat = {r: :s, p: :r, s: :p} 
# => {:r=>:s, :p=>:r, :s=>:p} 

爲什麼是作爲符號生成此哈希鍵?這是做這個的簡短形式嗎?

defeat[:r] = :s 
defeat[:p] = :r 
defeat[:s] = :p 

是否有這種哈希風格的名稱?

回答

2

A Hash可以通過使用其隱含的形式很容易地創建的:

grades = { "Jane Doe" => 10, "Jim Doe" => 6 } 

散列允許替代語法形式時鑰匙總是符號。取而代之的

options = { :font_size => 10, :font_family => "Arial" } 

你可以把它寫成:

options = { font_size: 10, font_family: "Arial" } 

在你的榜樣 @defeat = {r: :s, p: :r, s: :p}

現在,所有鍵符號。這就是爲什麼你的例子Hash是一個有效的構造,自1.9以來已經引入。

+0

謝謝,當然我找到了解決辦法,要求太之後:http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#Hashes。 – slm 2014-10-07 17:15:29

1

當您使用哈希樣式{key:value}時,您實際上正在聲明該鍵的符號。就像奧雅納的例子一樣,{:key => value}與隱式形式是一樣的。因此,無論何時您使用:而不是=>在散列中,您都將創建一個符號作爲密鑰。

在您的示例中,您正在爲您的鍵和值創建符號。

{key: :value } # both are symbols