Klasse kan besit eienskappe van hul ouer klasse. Maar soms jy wil 'n kenmerk in staat wees om die waarde van 'n ouer voorwerp te besit. Byvoorbeeld, dit is hoe CSS style werk in HTML.
MooseX :: AttributeTree is 'n Perl module wat u toelaat om die TreeInherit eienskap in jou klas te kan toepas op 'n kenmerk. & Nbsp; Dit verander die manier waarop die kenmerk accessor metode werk. Wanneer die lees van die eienskap se waarde, indien geen waarde is ingestel vir die eienskap in hierdie voorwerp, die accessor sal die waarde van die ouer voorwerp (wat dalk self geërf word) terug te keer.
Die ouer voorwerp hoef nie dieselfde tipe as die kind voorwerp te wees, maar dit moet 'n metode het met dieselfde naam as die kenmerk accessor metode (tensy jy lewer 'n fetch_method). (Die ouer se metode kan 'n kenmerk accessor metode wees nie, maar dit het nie te wees nie.) As die ouer nie die reg metode, sal jy 'n runtime fout as die kind probeer om dit te noem.
By verstek, MooseX :: AttributeTree verwag dat die ouer voorwerp te kry deur die roeping van die voorwerp se ouer metode. Maar, kan jy enige metode gebruik om die skakel te haal deur die verbygaan van die toepaslike parent_link die TreeInherit eienskap:
& Nbsp; het voorouer => (
& Nbsp; is => 'rw "
& Nbsp; Jes => 'item',
& Nbsp; weak_ref => 1,
& Nbsp;);
& Nbsp; het waarde => (
& Nbsp; is => 'ro "
& Nbsp; eienskappe => [TreeInherit => {parent_link => 'voorouer'}],
& Nbsp;);
Indien die metode terugkeer undef, dan erfenis stop en die accessor sal optree soos 'n normale accessor. (Normaalweg parent_link sal die naam van 'n kenmerk accessor metode wees nie, maar dit het nie te wees nie.)
Soms is dit nie maklik vir die ouer voorwerp 'n aparte metode te hê vir elke kenmerk dat 'n kind voorwerp dalk wil beërwe. In daardie geval, kan jy lewer 'n fetch_method die TreeInherit eienskap.
& Nbsp; het other_value => (
& Nbsp; is => 'ro "
& Nbsp; eienskappe => [TreeInherit => {fetch_method => 'get_inherited'}],
& Nbsp;);
Met fetch_method, sal die geërf waarde kom uit
& Nbsp; $ self-> ouer-> get_inherited ('other_value');
in plaas van die gewone
& Nbsp; $ self-> ouer-> other_value ();
As jou eienskap het 'n gesegde metode, dit verslae of die kenmerk is ingestel op die voorwerp. Die gesegde het geen kennis van enige waarde wat van 'n ouer geërf kan word. Dit beteken dat $ objek-> kan has_value valse terugkeer selfs al $ objek-> waarde sou 'n waarde (geërf van die ouer) terug te keer.
Net so, sal die kenmerk duideliker metode (indien enige) die kenmerk duidelik net op hierdie voorwerp, en sal nooit 'n ouer voorwerp beïnvloed.
SINOPSIS
& Nbsp; pakket MyClass;
& Nbsp; gebruik Moose;
& Nbsp; gebruik MooseX :: AttributeTree ();
& Nbsp; het ouer => (
& Nbsp; is => 'rw "
& Nbsp; Jes => 'item',
& Nbsp; weak_ref => 1,
& Nbsp;);
& Nbsp; het waarde => (
& Nbsp; is => 'rw "
& Nbsp; eienskappe => [QW / TreeInherit /],
& Nbsp;);
Vereistes :
- Perl
Kommentaar nie gevind