我只是红宝石的新手.我见过一个字符串方法(String).hash.
例如,在irb,我尝试过
>> "mgpyone".hash
Run Code Online (Sandbox Code Playgroud)
回报
=> 144611910
Run Code Online (Sandbox Code Playgroud)
这个方法有什么用?
Mar*_*rth 11
该hash方法是为所有对象定义的.见文档:
Fixnum为此对象生成哈希值.此函数必须具有a.eql?(b)暗示的属性a.hash == b.hash.哈希值由类使用Hash.Fixnum在使用之前,任何超出a容量的哈希值都将被截断.
因此该String.hash方法在C-Code中定义.基本上(过度简化)它只是总结了该字符串中的字符.
如果您需要获得一致的散列输出,我建议不要使用'string.hash,而是考虑使用Digest::MD5,这在多实例云应用程序中是安全的,例如您可以测试这一点,如 @BenCrowell 之前的评论中提到的
从终端运行 2 次,每次都会得到不同的输出:
ruby -e "puts 'a'.hash"
Run Code Online (Sandbox Code Playgroud)
但如果你运行这个,输出将是一致的:
ruby -e "require 'digest'; puts Digest::MD5.hexdigest 'a'"
Run Code Online (Sandbox Code Playgroud)