отказ от ответственности: код, взятый из ruby koans
Это обсуждение обсуждения констант внутри классов. Вот определение нескольких классов:
class Animal
LEGS = 4
def legs_in_animal
LEGS
end
end
class MyAnimals
LEGS = 2
class Bird < Animal
def legs_in_bird
LEGS
end
end
end
На этом этапе выполнение MyAnimals::Bird.new.legs_in_bird
приводит к 2, и я понимаю, почему - поиск лексического пространства для константы перед наследственной иерархией.
Затем этот класс определяется:
class MyAnimals::Oyster < Animal
def legs_in_oyster
LEGS
end
end
В учебнике говорится, что теперь вызов MyAnimals::Oyster.new.legs_in_oyster
приводит к 4, и я не могу понять это. Мне кажется, что Oyster - это вложенный класс в MyAnimals, и поэтому я ожидал, что он будет вести себя так же, как и класс Birds. Мне не хватает какой-либо ключевой информации о том, что объявляет класс Oyster с явным средством определения области видимости.
Может кто-нибудь объяснить это мне? Я нашел сотни рубиновых учебных пособий через Google, но ни один из них не затрагивает эту ситуацию.
благодарим вас заранее...