【问题标题】:Is there a default variable `hash`?是否有默认变量“哈希”?
【发布时间】:2015-09-18 19:03:36
【问题描述】:

我在 irb 或 Rails 控制台中输入了hash,我可以看到它包含一些随机值。我不知道它是否应该在那里或者它是由某个 gem 完成的。

这里:

hash # => -943824087729528496

再试一次:

hash # => 3150408717325671348 

这正常吗?如果有,有什么用?或者那个值是什么意思?

【问题讨论】:

  • defined?(hash) 表明它是一种方法,method(:hash) 表明它的来源
  • @Stefan 我应该这样做,但我想我对我的发现感到不知所措,无法在这里提问:P

标签: ruby


【解决方案1】:

在 Ruby 中,所有顶级方法调用都发生在 main 对象上:

self
#=> main 

main 是类Object 的对象:

self.class
#=> Object

所以在顶层,hash 调用main 对象上的Object#hash 方法:

哈希 → 固定编号

为此对象生成一个 Fixnum 哈希值。这个功能必须有 a.eql?(b) 暗示 a.hash == b.hash 的属性。

哈希值是和eql一起使用的吗?由Hash类来确定 如果两个对象引用相同的哈希键。任何哈希值 超过 Fixnum 的容量将在使用前被截断。

一个对象的哈希值在不同的调用中可能不相同 或 Ruby 的实现。如果您需要一个稳定的标识符 您需要生成的 Ruby 调用和实现 使用自定义方法。

有关 Ruby 顶层的更多信息,请参阅博文 What is the Ruby Top-Level?

【讨论】:

  • 这很有意义。谢谢
【解决方案2】:

hash 是对象上的方法(docs)

它属于“顶级”more info

【讨论】:

    【解决方案3】:

    通过从pry/irb 调用hash,只需在main 上调用Object#hash

    【讨论】:

    • 解释一下。谢谢:)
    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 2012-11-09
    • 2015-10-06
    • 2019-12-02
    • 2015-02-10
    • 2021-11-01
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多