Ваша проблема в том, что вы ошиблись в значении кода.
class << self
FOO = :bar
end
не эквивалентно self.FOO = :bar
. Это очень отличается от этого. Это эквивалентно self.singleton_class.const_set(:FOO, :bar)
.
Я думаю, вы предполагаете, что class << self
означает «предположим, что есть неявное« я »перед всем, что я здесь пишу» или что-то в этом роде »(возможно, вы думаете об утверждении JavaScript with
). Что он на самом деле делает, так это помещает нас в контекст одноэлементного класса self
, особого класса, единственным экземпляром которого является текущий объект. Итак, вы определяете константу в синглтон-классе объекта.
Чтобы определить константу в классе, вы просто пишете:
class Something
FOO = :bar
end