Меня очень смущает поведение Ruby при определении const_missing
и других методов класса внутри определения class << self
вместо использования def self.foo
синтаксис.
Я пытался сделать что-то вроде этого:
class Foo
class << self
def foo
puts MISSING
end
def const_missing(name)
puts "#{name} missing"
end
end
end
Foo.foo
Я в основном использую синтаксис class << self
для определения методов класса. Однако это не сработало, как ожидалось. const_missing
никогда не вызывается. Вышеупомянутое приводит к ошибке NameError.
Определение обоих методов подобным образом работает, как ожидалось:
def self.foo
puts MISSING
end
def self.const_missing(name)
puts "#{name} missing"
end
Я думал, что синтаксис class << self
- это просто еще один способ определения методов класса, но полностью эквивалентный def self.foo
? Я проверил это с помощью MRI 1.8.7, 1.9.2 и JRuby 1.5.6. Так что, очевидно, мне здесь чего-то не хватает?
Любые подсказки приветствуются.
Спасибо, Мартин