我有一个简单的代码片段,它定义了一个方法(在Ruby&#39的主要对象上),然后检查它是否已定义。
puts "#{self} #{self.class}"
def foo;end
puts self.methods.include?(:foo)
当我在Ruby控制台中运行它时。我明白了:
main Object
true
如果我将此代码粘贴到.rb文件中并像ruby test_script.rb
一样运行文件,我会得到以下输出
main Object
false
我无法理解为什么我会看到这种行为。方法是在脚本中定义,因为我可以调用方法。
我在Ruby 2.3.4上运行
答案 0 :(得分:0)
为了方便起见,IRB将顶级范围内的方法绑定到main作为公共方法,但是常规Ruby程序将顶级范围内定义的方法绑定到main作为私有方法。
找到参考