Mga Klase maaaring magmana ng mga katangian mula sa kanilang mga magulang klase. Ngunit minsan gusto isang katangian na magawang magmana ang halaga nito mula sa isang pangunahing bagay. Halimbawa, na kung paano gumagana ang mga estilo ng CSS sa HTML.
MooseX :: AttributeTree ay isang Perl module na nagbibigay-daan sa iyo upang ilapat ang TreeInherit kaugalian sa anumang attribute sa iyong klase. & Nbsp; Babaguhin nito ang paraan ng paggana ng paraan ng accessor ang katangiang iyon. Kapag nagbabasa ng halaga ng katangian, kung walang halaga ay naitakda para sa mga katangian sa bagay na ito, ang accessor ay magbabalik ng mga halaga mula sa mga pangunahing bagay (na maaaring mismo ay minana).
Ang pangunahing bagay ay hindi kailangang maging ang parehong uri ng bata na bagay, ngunit dapat itong magkaroon ng isang pamamaraan na may parehong pangalan tulad ng paraan ng accessor ang katangian ng (maliban kung ibibigay mo ng fetch_method). (Pamamaraan Ang magulang ay maaaring isang paraan katangian ng accessor, ngunit hindi ito kailangang maging.) Kung ang magulang ay hindi magkaroon ng karapatan na pamamaraan, makakakuha ka ng isang error sa runtime kung ang bata na mag tawagan ito.
Sa pamamagitan ng default, inaasahan MooseX :: AttributeTree upang makuha ang mga pangunahing bagay sa pamamagitan ng pagtawag pamamaraan magulang ang bagay na iyon. Gayunpaman, maaari mong gamitin ang anumang paraan upang mabawi ang mga link sa pamamagitan ng pagpasa ng naaangkop na parent_link sa TreeInherit kaugalian:
& Nbsp; May ninuno => (
& Nbsp; ay => 'RW',
& Nbsp; Isa => 'Bagay',
& Nbsp; weak_ref => 1,
& Nbsp;);
& Nbsp; ay may value => (
& Nbsp; ay => 'ro',
& Nbsp; mga ugali => [TreeInherit => {parent_link => 'ninuno'}],
& Nbsp;);
Kung ang pamamaraan ay nagbabalik undef, pagkatapos ay i-hinto ang inheritance at ang accessor ay kikilos nang tulad ng isang normal na accessor. (Karaniwan, parent_link ay magiging ang pangalan ng isang paraan katangian ng accessor, ngunit hindi ito kailangang maging.)
Minsan hindi maginhawa para sa mga pangunahing bagay na magkaroon ng isang hiwalay na pamamaraan para sa bawat katangian na maaaring gusto ng isang bata na bagay upang magmana. Sa kasong iyon, maaari mong matustusan ang isang fetch_method sa TreeInherit kaugalian.
& Nbsp; May other_value => (
& Nbsp; ay => 'ro',
& Nbsp; mga ugali => [TreeInherit => {fetch_method => 'get_inherited'}],
& Nbsp;);
Sa fetch_method, ang minana halaga ay darating mula sa
& Nbsp; $ sarili> parent-> get_inherited ('other_value');
sa halip ng karaniwang
& Nbsp; $ sarili> parent-> other_value ();
Kung ang iyong katangian ay may pamamaraan tambalan, nag-uulat ito kung ang katangian ay naitakda sa bagay na iyon. Ang tambalan ay walang kaalaman sa anumang halaga na maaaring minana mula sa magulang. Ito ay nangangahulugan na $ object-> has_value maaaring return false kahit na $ object-> halaga ay nagbabalik ng halaga (minana mula sa magulang).
Gayundin, mas malinaw na paraan ang katangian (kung mayroon man) ay i-clear ang katangian lamang sa bagay na ito, at gusto hindi kailanman makakaapekto sa isang pangunahing bagay.
Buod
& Nbsp; package MyClass;
& Nbsp; gamitin Moose;
& Nbsp; gamitin MooseX :: AttributeTree ();
& Nbsp; May magulang => (
& Nbsp; ay => 'RW',
& Nbsp; Isa => 'Bagay',
& Nbsp; weak_ref => 1,
& Nbsp;);
& Nbsp; ay may value => (
& Nbsp; ay => 'RW',
& Nbsp; mga ugali => [qw / TreeInherit /],
& Nbsp;);
Mga Kinakailangan :
- Perl
Mga Komento hindi natagpuan