什么是' hash'用于irb?

时间:2014-05-12 06:00:13

标签: ruby irb

当我进入irb并输入hash时,它会返回一些值,例如2601657421772335946Fixnumhash用于什么?

2 个答案:

答案 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值来确定如何排列哈希键。