.hash字符串方法如何工作?

时间:2010-03-24 06:45:21

标签: ruby hash

我只是红宝石的新手。我见过一个字符串方法(String).hash。

例如,在irb中,我尝试了

>> "mgpyone".hash

返回

=> 144611910

这种方法如何运作?

2 个答案:

答案 0 :(得分:11)

为所有对象定义hash方法。见documentation

  

为此生成Fixnum哈希值   宾语。这个功能必须有   a.eql?(b)暗示a.hash == b.hash的属性。   哈希值由类Hash使用。任何哈希值   超过Fixnum意志的容量   在被使用之前被截断。

因此String.hash方法在C-Code中定义。基本上(过度简化)它只是总结了该字符串中的字符。

答案 1 :(得分:0)

如果您需要获得一致的哈希输出,我建议您不要使用'string.hash,而应考虑使用Digest::MD5,这在多实例云应用程序中是安全的,例如,您可以如上所述进行测试@BenCrowell在前面的评论中

从终端运行两次,每次您将获得不同的输出:

ruby -e "puts 'a'.hash"

但是,如果运行此命令,输出将保持一致:

ruby -e "require 'digest'; puts Digest::MD5.hexdigest 'a'"