Из этого примера существуют 2 разных класса? (Класс лошади с новым методом или конструктором, класс Mule с другим новым конструктором).
Совершенно верно.
В любое время вы видите выражение STRING_LITERAL->METHOD_NAME()
, что STRING_LITERAL
почти гарантированно будет именем класса.
И когда вы видите STRING_LITERAL->new()
, , если человек, который написал код решил быть слишком умным для их собственного блага, это будет призыв к этому классу конструктор, возвращающий объект этого класса. (Тем не менее, «новый», являющийся конструктором, является просто добровольным соглашением, в Perl нет ничего, что обеспечивало бы это - кто-то слишком умный/немой МОЛИТЬ определил «new()» sub, чтобы вернуть значение 2+3
- у вас нет никакой гарантии в сторону глядя на код и тестирование)
После этого примера, вы получите, надеюсь:
$ жеребец - держит значение, возвращенное из конструктора класса Horse - будет иметь в качестве значения объекта класса Лошадь.
$ molly - удерживая значение, возвращаемое из конструктора класса Mule, будет иметь в качестве значения объект класса Mule.
Что происходит, когда эта ссылка жеребец передается другому конкретизации класса?
Что происходит в $molly->breed($stallion);
вызов, - как ответили на вчерашнем вопросе, это объект способ вызова метода, так что вы делаете:
- Создать список параметров (в этом случае $ жеребец)
- Prepend объект к нему, в результате чего ($ Molly, $ жеребца)
- Пасса этого списка
breed()
подпрограммы, которые, конечно, должны быть определены в классе т Объект hat $ molly принадлежит (например, быть методом в классе Mule
)
- Внутри
breed()
подпрограмма, специальная переменная списка @_
будет сглажена элементам этого списка параметров ($ molly, $ stallion).
- Что произойдет, то 100% зависит исключительно от того, как код «породы» подразделам написано
И в том, что код породы другой метод в другом классе?
Как было отмечено в пункте пули выше, да, если $ Molly является объектом определенного класса (Mule), выражение $molly->METHOD_NAME()
средства вызова метода с таким именем, который известен (определенным или унаследованным от родительского класса), в классе которого $ molly является объектом.
Я думаю, что вы вызовете исключение, если попытаетесь развить ее, потому что мулы почти всегда стерильны. Вероятно, тебе захотелось осел. :) – tchrist
@tchrist - отходит от книг Perl до линии животноводства? :) – DVK
@ Nelmark- «$ molly - это то же самое, что и класс Mule» - № $ molly - это ** объект ** класса «Мул». – DVK