【问题标题】:Why are top level methods handled differently in irb?为什么在 irb 中顶级方法的处理方式不同?
【发布时间】:2013-07-27 04:05:10
【问题描述】:

考虑这段代码:

def x; end
puts public_methods.include? :x

如果我在 irb 和 ruby​​ 解释器(都使用 Ruby 1.9.3)上运行它,我会得到:

true # from irb
false # from ruby

为什么在irb 中公开定义顶级方法,为什么它与ruby 不同?

【问题讨论】:

  • Irb 在我的环境中提供false
  • irb 在我的环境中也给出了错误。
  • 我在 irb 中也是假的
  • 我添加了一张显示实际 irb 会话的照片。
  • 这种行为在 Ruby 2.0.0 中发生了变化。在 Ruby 2.0.0 中,irb/ruby 均产生 false

标签: ruby ruby-1.9 irb


【解决方案1】:

我可以在 Ruby 1.9.3p448 中确认这种行为。

我认为这是因为在 irb 的 repl 中,定义被包裹在单例中,所以要模仿它,只需在脚本中添加以下内容:

class << self
  def x; end
end

puts public_methods.member? :x    # true

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2018-03-21
    • 2021-11-22
    相关资源
    最近更新 更多