2014-05-12 37 views

回答

1

幾乎所有的Ruby響應hash,包括selfirb。從fine Object manual

散列()

生成此對象的Fixnum散列值。此功能必須具有a.eql?(b)暗示a.hash == b.hash的屬性。

散列值與Hash類中的sql?一起使用,以確定兩個對象是否引用相同的散列鍵。任何超過Fixnum容量的散列值在使用前都會被截斷。

在調用或實現ruby時,對象的哈希值可能不相同。如果您需要在Ruby調用和實現中使用穩定的標識符,則需要使用自定義方法生成一個。

Hash類在內部使用hash值來計算如何排列哈希鍵。

1

當您登錄到IRB時,self已被設置爲main(是類Object的一個實例)。現在當你寫hash時,它實際上是self(這是隱式的)調用的方法Object#hash

Arup-iMac:arup$ irb 
2.1.0 :001 > self 
=> main 
2.1.0 :002 > method(:hash).receiver 
=> main 
2.1.0 :003 > self.class 
=> Object 
2.1.0 :004 > 

從文檔中,爲什麼需要#hash

生成此對象的Fixnum散列值。這個函數必須具有a.eql?(b)意味着a.hash == b.hash的屬性。

散列值與eql一起使用?通過Hash類來確定兩個對象是否引用相同的散列鍵。任何超過Fixnum容量的散列值在使用前都會被截斷。

在調用或實現ruby時,對象的哈希值可能不相同。如果您需要在Ruby調用和實現中使用穩定的標識符,則需要使用自定義方法生成一個。