我只是红宝石的新手。我看过一个字符串方法(String).hash。
例如,在irb
中,我尝试过
>> "mgpyone".hash
返回
=> 144611910
此方法如何工作?
hash
方法已为所有对象定义。参见documentation:
为此生成
Fixnum
哈希值 宾语。此功能必须具有a.eql?(b)
暗示a.hash == b.hash
的属性。 哈希值由类Hash
使用。任何哈希值 超过Fixnum
的容量 在使用之前被截断。
因此String.hash
方法在C-Code中定义。基本上(过于简化)它只是将字符串中的字符求和。
[如果您需要获得一致的哈希输出,我建议您不要使用'string.hash
,而应考虑使用Digest::MD5,这在多实例云应用程序中将是安全的,例如,您可以按照前面的注释中所述通过以下方法进行测试: @BenCrowell
从终端运行此2x,每次将获得不同的输出:
ruby -e "puts 'a'.hash"
但是如果运行此命令,输出将是一致的:
ruby -e "require 'digest'; puts Digest::MD5.hexdigest 'a'"