Я просто размышлял над тем же вопросом из того же самого коана. Я не специалист в области определения объема работ, но следующее простое объяснение имело для меня большой смысл, и, возможно, оно также поможет вам.
Когда вы определяете MyAnimals::Oyster
, вы все еще находитесь в глобальной области видимости, поэтому ruby не знает о значении LEGS
, установленном в 2 в MyAnimals
, потому что вы на самом деле никогда не находитесь в области действия MyAnimals
(немного противоречащий).
Однако все было бы иначе, если бы вы определили Oyster
так:
class MyAnimals
class Oyster < Animal
def legs_in_oyster
LEGS # => 2
end
end
end
Разница в том, что в приведенном выше коде к тому времени, когда вы определяете Oyster
, вы попадаете в область действия MyAnimals
, поэтому ruby знает, что LEGS
относится к MyAnimals::LEGS
(2), а не Animal::LEGS
(4).
К вашему сведению, я получил это представление по следующему URL (указанному в вопросе, на который вы ссылались):