当我进入irb并输入hash
时,它会返回一些值,例如2601657421772335946
,Fixnum
。 hash
用于什么?
答案 0 :(得分: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调用和实现中使用稳定的标识符,则需要使用自定义方法生成一个标识符。
答案 1 :(得分:1)
Ruby中的所有内容都响应hash
,包括self
中的irb
。来自fine Object
manual:
<强>散列()强>
为此对象生成
Fixnum
哈希值。此函数必须具有a.eql?(b)
隐含a.hash == b.hash
的属性。散列值与Hash类的
sql?
一起用于确定两个对象是否引用相同的散列键。任何超出Fixnum容量的哈希值在被使用之前都将被截断。对于ruby的调用或实现,对象的哈希值可能不相同。如果您需要在ruby调用和实现中使用稳定的标识符,则需要使用自定义方法生成一个标识符。
Hash
类在内部使用hash
值来确定如何排列哈希键。