【问题标题】:Why there is discrepanceis in number of instance methods?为什么实例方法的数量存在差异?
【发布时间】:2015-04-08 05:24:10
【问题描述】:

在浏览ruby monk 时,我看到 Float 实例方法的计数为 201,但是当我在 irb 中尝试时,它只显示 114。如果有人让我理解为什么会发生变化,那将非常有帮助实例方法中的计数数量以及该实例方法取决于哪些因素。

puts Float.instance_methods.count

【问题讨论】:

  • 确定不是因为使用的 ruby​​ 版本不同吗?
  • 嗯.. 可能不会。我在 ruby​​ 1.9 中得到 112,在 ruby​​ 2.2 中得到 114。不确定 201 可能来自哪里。
  • 我正在使用 ruby​​ 2.2.0、1.9.3 并发现两个版本的差异,但是这个 201 是从哪里来的?
  • 你从哪里得到 201?我在 Ruby Monk 链接上没有看到它。请注意 v2.2 中的1.0.methods.count #=> 114,还有1.0.private_methods.count #=> 76114+76 => 190.
  • @CarySwoveland 我已经给出了结果为 201 的页面的链接。请向下滚动页面,您会找到它

标签: ruby-on-rails ruby ruby-1.9.3


【解决方案1】:

RubyFloat 类(相同版本)的实例方法总数没有差异。数量可能因 Ruby 版本而异,但没有两个相同的 Ruby 版本会有不同的实例方法。

我看到 Float 实例方法的计数为 201

您看到的是扩展浮点类的实例方法总数。扩展由 Rails 完成。

例如在Rubymonk终端中,Float类的实例方法列表显示duplicable?,这显然不是Float类的实例方法。它通过扩展核心 Object 类在 ActiveSupport 中实现,并在 Rails 3.2.13 之后被弃用。

【讨论】:

  • 您是说这个数字比预期的要高,因为 Rails(或其某些部分)已加载。这是一个令人信服的解释,但我不会说“没有差异”。毕竟这门课叫做《Ruby Primer》,纯Ruby的一门课程。可以合理地预期,显示为在 Float 上定义的实例方法的数量仅适用于 Ruby,并且从一个最新版本到下一个版本,该数量不会有很大差异。 cyborg,我建议你把这个建议传递给课程作者之一。
  • @CarySwoveland,不同的 Ruby 版本在实例方法之间可能会有一点差异,但不像 100。我在 Rubymonk 控制台中检查了 Float 类的实例方法,它们显示了 Object 类的所有实例方法(扩展由 ActiveSupport Core 提供)以及 Float 类的实例方法(在 Ruby Core 中定义)。
  • 是的,如果您在 RubyMonk 控制台中执行“puts ActiveSupport.to_s”,它确实已定义。傻 - 它可能不应该在那里。
  • 我们以 OP 问题的形式获得了第一手证据,即说 Float 有 201 个实例方法对于希望在自己的计算机上检查计算的学生来说是莫名其妙的。 Egad,对于我们中的许多人来说,这让我们有相当多的经验感到莫名其妙。我们是否应该期望新手得出结论,差异是由于 Rails 已加载,而他们所知道的唯一轨道是钢制的?不,课程应该显示在 Float 上为纯 Ruby(一些最新版本)定义的实例方法的数量。这并不难,对我来说这是“不费吹灰之力”。
  • @CarySwoveland,你是绝对正确的,对于一个新手来说,这真的很难而且令人困惑。他们应该公开 Ruby 控制台而不是 Rails 控制台。
猜你喜欢
  • 2011-03-15
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 2013-03-13
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多