ruby的String .hash方法如何工作?

问题描述 投票:9回答:2

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

例如,在irb中,我尝试过

>> "mgpyone".hash

返回

=> 144611910

此方法如何工作?

ruby hash
2个回答
12
投票

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

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

因此String.hash方法在C-Code中定义。基本上(过于简化)它只是将字符串中的字符求和。


0
投票

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

从终端运行此2x,每次将获得不同的输出:

ruby -e "puts 'a'.hash"

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

ruby -e "require 'digest'; puts Digest::MD5.hexdigest 'a'"
© www.soinside.com 2019 - 2024. All rights reserved.