为什么在顶层定义方法会影响其他用户定义的类?

时间:2011-10-14 05:51:13

标签: ruby

如果我定义这样的顶级方法:

def inspect(x)
  # do something useful...
end

然后在用户定义的类上调用#inspect停止工作:

class Foo; end
p Foo.new # `inspect': wrong number of arguments (0 for 1) (ArgumentError)

但是,它一直适用于NilClassString等类:

p nil    # prints 'nil'
p "test" # prints '"test"'

我认为对此行为的一种解释可能是顶层执行可能在Object类本身,但事实证明它位于Object的{​​{1}}实例中。 }。这是不是意味着这里定义的方法不应该影响其他类?

1 个答案:

答案 0 :(得分:3)

main是一个特殊的地方。其中定义的任何方法都定义为Object的私有实例方法。这样你就可以定义伪函数,可以在没有显式接收器的情况下在任何上下文中调用。