[英]Ruby: setting a new hash with an array of keys/values
(--工作人員刪除的問題--)
這是類方法和實例方法之間區別的示例嗎?
確切地。
但是為什么這可以縮短為Hash[*order]
?
Ruby 將some_object[]
解釋為對some_object
上名為[]
的方法的調用。 這對於哈希並不特殊,您可以在您自己的任何類中實現[]
方法並使用該語法。
有人可以解釋這里發生了什么,以及是否有其他方法可以將數組中的值添加到哈希中?
Hash[*order]
調用一個類方法( Hash#[]
)來創建一個新的 Hash。 o.[](*order)
不起作用的原因與您不能對其調用new
原因相同: {}.new
new
沒有任何意義。 您不能在類的實例上調用類方法。
您可以使用merge
添加值:
o = Hash.new
o.merge(Hash[*order])
o = {*order}
不起作用,因為{}
是哈希文字的語法,將*order
放在那里沒有意義。
Hash(*order)
是Kernel#Hash ,一種只需要一個參數的方法。
當你寫Hash(*order)
你實際上是在調用Kernel
模塊中的Hash
方法,這與調用Hash
類中的[]
方法是不一樣的。 請參閱Kernel#Hash
的文檔以了解那里發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.