2

考虑到这段代码:

def x; end
puts public_methods.include? :x

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

true # from irb
false # from ruby

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

irb 会话

4

1 回答 1

1

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

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

class << self
  def x; end
end

puts public_methods.member? :x    # true
于 2013-07-27T08:50:30.320 回答