Классы могут наследовать атрибуты от родительских классов. Но иногда вы хотите атрибут, чтобы иметь возможность наследует свое значение от родительского объекта. Например, вот как стили CSS в HTML работать.
MooseX :: AttributeTree модуль Perl, который позволяет применять TreeInherit черта для любого атрибута в классе NBSP &;. Это изменяет способ акцесора атрибута работает. При чтении значения атрибута, если значение не было установлено для атрибута в этом объекте, аксессор вернет значение от родительского объекта (который может быть сам по наследству).
Родительский объект не должен быть того же типа, как дочерний объект, но он должен иметь метод с тем же именем, метода доступа атрибута (если вы не укажете fetch_method). (Родительский метод может быть метод атрибут аксессор, но это не должно быть.) Если родитель не имеет правильный метод, вы получите сообщение об ошибке выполнения, если ребенок пытается вызвать его.
По умолчанию, MooseX :: AttributeTree рассчитывает получить родительский объект, вызвав метод родительского объекта. Тем не менее, вы можете использовать любой метод, чтобы получить ссылку на соответствующий прохождения parent_link к черту TreeInherit:
& NBSP; имеет предком => (
& NBSP; это => 'RW ",
& NBSP; ISA => 'Объект',
& NBSP; weak_ref => 1,
& NBSP;);
& NBSP; имеет значение => (
& NBSP; это => 'ро',
& NBSP; черты => [TreeInherit => {parent_link => 'предка'}],
& NBSP;);
Если метод возвращает ФДООН, то наследование прекращается, и сбруя будет вести себя как обычный метод доступа. (Обычно, parent_link будет имя метода атрибута аксессор, но это не должно быть.)
Иногда это не очень удобно для родительского объекта, чтобы иметь отдельный метод для каждого атрибута, что объект ребенок может хотим наследовать. В этом случае, вы можете поставить fetch_method к черту TreeInherit.
& NBSP; имеет other_value => (
& NBSP; это => 'ро',
& NBSP; черты => [TreeInherit => {fetch_method => 'get_inherited'}],
& NBSP;);
С fetch_method, наследуемое значение будет поступать из
& NBSP; $ само> родительский,> get_inherited ('other_value');
вместо обычных
& NBSP; $ само> родительский,> other_value ();
Если ваш атрибут имеет метод предикат, он сообщает, был ли установлен атрибут этого объекта. Предикат не имеет никакого знания любого значения, которые могут быть унаследованы от родителей. Это означает, что $ объектно> has_value может вернуться ложным, хотя $ объектно> значение будет возвращать значение (унаследованный от родителей).
Точно так же, яснее способ атрибута (если таковые имеются) будет очистить атрибут только на этом объекте, и никогда не будет влиять на родительский объект.
ОБЗОР
& NBSP; пакет MyClass;
& NBSP; использовать Moose;
& NBSP; использовать MooseX :: AttributeTree ();
& NBSP; имеет родителей => (
& NBSP; это => 'RW ",
& NBSP; ISA => 'Объект',
& NBSP; weak_ref => 1,
& NBSP;);
& NBSP; имеет значение => (
& NBSP; это => 'RW ",
& NBSP; черты => [QW / TreeInherit /],
& NBSP;);
Требования
- Perl
Комментарии не найдены