在使用定义const_missing和定义中的其他类方法class << self而不是使用def self.foo语法时,我对Ruby的行为感到非常困惑.
我试图做这样的事情:
class Foo
class << self
def foo
puts MISSING
end
def const_missing(name)
puts "#{name} missing"
end
end
end
Foo.foo
Run Code Online (Sandbox Code Playgroud)
我主要使用class << self语法来定义类方法.但是,它没有按预期工作.const_missing永远不会被称为.以上结果是NameError.
定义这样的两种方法按预期工作:
def self.foo
puts MISSING
end
def self.const_missing(name)
puts "#{name} missing"
end
Run Code Online (Sandbox Code Playgroud)
我认为class << self语法只是定义类方法的另一种方式,但完全等同于def self.foo?我用MRI 1.8.7,1.9.2和JRuby 1.5.6测试了上述内容.显然我在这里遗漏了一些东西?
非常感谢任何提示.
谢谢,马丁