Sarjat voi periä ominaisuuksia vanhempiensa luokissa. Mutta joskus haluat ominaisuuden pystyä periä arvonsa pääobjekti. Esimerkiksi se, miten CSS tyylit toimivat HTML.
MooseX :: AttributeTree on Perl-moduuli, jonka avulla voit hakea TreeInherit piirre tahansa ominaisuuden omassa luokassa. & Nbsp; Tämä muuttaa tapaa attribuutin accessor menetelmä toimii. Kun luet attribuutin arvo, jos mitään arvoa ole asetettu määrite tämän esineen, accessor palaa arvon pääobjekti (joka voisi itsessään olla perinnöllinen).
Pääobjekti ei tarvitse olla samaa tyyppiä kuin lapsi esine, vaan sen on oltava menetelmä, jolla on sama nimi kuin attribuutin accessor menetelmä (ellet toimittaa fetch_method). (Vanhemman menetelmä voi olla attribuutti accessor menetelmää, mutta sen ei tarvitse olla.) Jos vanhempi ei ole oikea tapa, saat runtime error, jos lapsi yrittää soittaa sitä.
Oletuksena MooseX :: AttributeTree odottaa saavansa pääobjekti soittamalla objektin vanhempi menetelmä. Voit kuitenkin käyttää mitä tahansa menetelmää hakea yhteydestä välittämällä sopiva parent_link on TreeInherit piirre:
& Nbsp; on esi => (
& Nbsp; on => 'rw ",
& Nbsp; isa => 'Object ",
& Nbsp; weak_ref => 1,
& Nbsp;);
& Nbsp; on arvo => (
& Nbsp; on => 'ro',
& Nbsp; piirteet => [TreeInherit => {parent_link => 'esi "}],
& Nbsp;);
Jos metodi palauttaa undef sitten perintö pysähtyy ja accessor käyttäytyy kuin normaali accessor. (Yleensä, parent_link on nimi attribuutin accessor menetelmää, mutta sen ei tarvitse olla.)
Joskus se ei ole kätevä pääobjekti olla erillinen menetelmä kunkin ominaisuuden, että lapsi esine saattaa haluta periä. Tällöin voit toimittaa fetch_method jotta TreeInherit piirre.
& Nbsp; on other_value => (
& Nbsp; on => 'ro',
& Nbsp; piirteet => [TreeInherit => {fetch_method => 'get_inherited "}],
& Nbsp;);
Kanssa fetch_method, perinnöllinen arvo tulevat
& Nbsp; $ itse-> vanhemmuutta> get_inherited ('other_value');
sen sijaan,
& Nbsp; $ itse-> vanhemmuutta> other_value ();
Jos attribuutti on predikaatti menetelmä, se raportoi onko määrite on asetettu, että esine. Predikaatti ei ole tietoa mitään arvoa, joka saattaa periytyä vanhemmalta. Tämä tarkoittaa, että $ object-> has_value voi return false vaikka $ object-> arvo palaisi arvo (periytyy vanhemman).
Samoin attribuutin selkeämpi tapa (jos on) olisi selkeä määrite vain tämä esine, ja ei koskaan vaikuttaisi pääobjekti.
ALKULAUSE
& Nbsp; paketti MyClass;
& Nbsp; käytä Moose;
& Nbsp; käytä MooseX :: AttributeTree ();
& Nbsp; on vanhempi => (
& Nbsp; on => 'rw ",
& Nbsp; isa => 'Object ",
& Nbsp; weak_ref => 1,
& Nbsp;);
& Nbsp; on arvo => (
& Nbsp; on => 'rw ",
& Nbsp; piirteet => [qw / TreeInherit /],
& Nbsp;);
Vaatimukset :
- Perl
Kommentteja ei löytynyt