2009-09-22 68 views
4
fruit = ["apple","red","banana","yellow"] 
=> ["apple", "red", "banana", "yellow"] 

Hash[*fruit]  
=> {"apple"=>"red", "banana"=>"yellow"} 

爲什麼splat會導致數組如此整齊地分析到哈希中?從數組中製作哈希 - 這是如何工作的?

或者更準確地說,哈希如何「知道」「蘋果」是關鍵,「紅色」是它的對應值?

難道僅僅是因爲他們在水果陣列中的連續位置?

摔跤在這裏使用有意義嗎?哈希是否可以不直接從arry中直接定義呢?

回答

9

作爲documentation狀態:

Hash["a", 100, "b", 200]  #=> {"a"=>100, "b"=>200} 
Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200} 
{ "a" => 100, "b" => 200 }  #=> {"a"=>100, "b"=>200} 

不能傳遞數組到根據Hash[]方法的文檔,因此,圖示只是一種方法來爆炸fruit陣列,並通過它的元素作爲正常參數Hash[]方法。事實上,這是splat操作符的一種非常常見的用法。

很酷的事情是,如果你嘗試通過奇數的參數哈希你會得到一個ArgumentError例外:

fruit = ["apple","red","banana","yellow","orange"] 
#=> ["apple", "red", "banana", "yellow", "orange"] 
Hash[*fruit] #=> ArgumentError: odd number of arguments for Hash 
2

看公共類方法[]類哈希。 (說,over here.)它清楚地表明,將創建一個新的哈希(實例)並與給定的對象填充。自然,它們成對出現。splat操作符實質上擴展數組作爲參數時。