I'm greatly confused by Ruby's behavior when defining const_missing
and other class methods inside a class << self
definition as opposed to using the def self.foo
syntax.
I was trying to do something like this:
class Foo
class << self
def foo
puts MISSING
end
def const_missing(name)
puts "#{name} missing"
end
end
end
Foo.foo
I mostly use the the class << self
syntax to define class methods. However, it did not work as expected. const_missing
is never called. The above results in a NameError.
Defining both methods like this works as expected:
def self.foo
puts MISSING
end
def self.const_missing(name)
puts "#{name} missing"
end
I thought that the class << self
syntax is just another way to define class methods, but completely equivalent to def self.foo
? I've tested the above with MRI 1.8.7, 1.9.2 and JRuby 1.5.6. So obviously I'm missing something here?
Any hint is greatly appreciated.
Thanks, Martin