我只是红宝石的新手。我见过一个字符串方法(String).hash。
例如,在irb
中,我尝试了
>> "mgpyone".hash
返回
=> 144611910
这种方法如何运作?
答案 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'"