Отсутствие константы и «const_missing» внутри определения «class << self»

Меня очень смущает поведение 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. Так что, очевидно, мне здесь чего-то не хватает?

Любые подсказки приветствуются.

Спасибо, Мартин

8
задан martido 14 March 2011 в 20:35
поделиться