为什么顶级方法在irb中的处理方式不同?

时间:2013-07-27 04:05:10

标签: ruby ruby-1.9 irb

考虑此代码:

def x; end
puts public_methods.include? :x

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

true # from irb
false # from ruby

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

irb session

1 个答案:

答案 0 :(得分:1)

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

我认为这是因为在irb的repl中,定义包含在单例中,所以要模仿它只是将以下内容放在脚本中:

class << self
  def x; end
end

puts public_methods.member? :x    # true