运行脚本与IRB控制台时的不同行为?

时间:2018-03-08 11:25:22

标签: ruby

我有一个简单的代码片段,它定义了一个方法(在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上运行

1 个答案:

答案 0 :(得分:0)

为了方便起见,IRB将顶级范围内的方法绑定到main作为公共方法,但是常规Ruby程序将顶级范围内定义的方法绑定到main作为私有方法。

您可以在这里Ruby main top level context

找到参考