2012-05-02 83 views
17

我在努力理解符號和文本之間的區別:關於冒號位置。我的理解是,當我們使用:符號時,我們指的是這個對象以及它所包含的任何東西,在這裏,文本:用於像文本一樣爲文本賦值,就像變量一樣。這是正確的還是可以有人詳細說明使用情況。謝謝。冒號位置在:something和somethingelse之間有什麼區別:

+1

符號:值只出現在散列表達,以此來縮短,但我沒有發現很多人青睞它。 – texasbruce

回答

18

:whatever是一個符號,你已經得到了該部分的權利。

當您使用的是亂碼,這是你如何使用1.8倍紅寶石來定義它:

{:key => value, :another_key => another_value} 

這就是所謂的hashrocket語法。在紅寶石1.9倍,此變更爲:

{key: value, another_key: another_value} 

有將仍然加載hashrocket語法向後兼容性。但是,在1.9,「關鍵:」是一個符號

+2

非常感謝! – Tom

+2

你最後的陳述會引起混亂......我不認爲'key:'是ruby中的符號,但是當這個語法進入大括號內部時,ruby將它標識爲符號。此外,hashrocket語法不僅僅用於向後兼容。事實上,如果你想用非符號鍵定義一個散列,你需要依賴散列火箭語法。我會說新的json風格語法更像是一個語法糖。 – rubyprince

17

{:key => value}是在紅寶石老哈希語法,現在我們有一個新的哈希語法更像是JSON所以

{:key => value} 

相同

{key: value} 

舊人,我們都熟悉的是:

old_hash = {:simon => "Talek", :lorem => "Ipsum"} 

這是所有美好和花花公子,但它可能是更簡單和更清潔。退房Ruby 1.9的風格,它有點類似於JSON:

new_hash = {simon: "Talek", lorem: "Ipsum"} 

但現在你仔細看,問,「而在此前的關鍵是一個符號明確,什麼這個現在是?」。

那麼你是對的,新的符號是最常見的哈希風格的語法糖,所謂的符號對象哈希。如果這樣做,在內部評級法,你會看到紅寶石返回老同學哈希,以用作鍵的符號:

> new_hash = {simon: "Talek", lorem: "Ipsum"} 
=> {:simon=>"Talek", :lorem=>"Ipsum"} 

如果您需要擁有任意對象作爲哈希鍵,你仍然有去做舊派。

裁判:http://breakthebit.org/post/8453341914/ruby-1-9-and-the-new-hash-syntax

相關問題