我试图通过以下定义捕获未定义的方法:
def method_missing m
puts "#{m} is missing"
end
当我编写一个未定义的方法时,例如foo
在它之后,它被捕获method_missing
:
foo # => foo is missing
但是当我编写一个未定义的方法时Foo
,它不会被捕获method_missing
:
Foo # => NameError: Uninitialized constant Foo
看起来如果它与一个常数消除歧义,那么它就会被捕获:
self.Foo # => Foo is missing
Foo() # => Foo is missing
为什么Foo
没有在第一种情况下被捕获?当方法在局部变量之间不明确时,它是否会被捕获method_missing
,但在常量之间不明确时不会被捕获?如果是这样,是否有这方面的文档?或者,这是一个错误?