クラスは、親クラスから属性を継承することができます。しかし、時にはあなたは、属性が親オブジェクトから値を継承できるようにしたい。例えば、それはCSSスタイルをHTMLでどのように動作するかだ。
のMooseX :: AttributeTreeは、あなたのクラス内の任意の属性にTreeInherit形質を適用することを可能にするPerlモジュールは これは属性のアクセサメソッドの動作方法を変更します。属性の値を読み出す場合、値がこのオブジェクトの属性に設定されていない場合、アクセサは(それ自体が継承される場合があります)親オブジェクトから値を返します。
親オブジェクトは、子オブジェクトと同じタイプである必要はありませんが、(あなたがfetch_methodを供給していない場合)には、属性のアクセサメソッドと同じ名前のメソッドを持っている必要があります。 (親のメソッドは、属性アクセサメソッドかもしれませんが、それがなくてもかまいません。)親は右のメソッドを持っていない場合は、子供がそれを呼び出そうとした場合、あなたはランタイムエラーを取得します。
デフォルトでは、のMooseX :: AttributeTreeは、オブジェクトの親メソッドを呼び出すことにより、親オブジェクトを取得する予定です。ただし、TreeInheritの形質に適切なparent_linkを渡すことによって、リンクを取得するために、任意の方法を使用することができます。
 持って祖先=>(
  => 'RW'です、
  ISA => 'オブジェクト'、
  weak_ref => 1、
 )。
  =>(値を持っている
  => 'RO」である、
 特質=> [TreeInherit => {parent_link => '祖先'}]、
 )。
メソッドがundefを返す場合、継承は停止し、アクセサは、通常のアクセサのように動作します。 (通常、parent_linkは、属性アクセサメソッドの名前になりますが、それはある必要はありません。)
場合によっては、子オブジェクトが継承される可能性のある属性ごとに別々の方法を持っている親オブジェクトのための便利ではありません。その場合、あなたはTreeInheritの形質にfetch_methodを供給することができます。
 (other_value =>を持って
  => 'RO」である、
 特質=> [TreeInherit => {fetch_method => 'get_inherited'}]、
 )。
fetch_methodでは、継承された値がから来る
  $自己> parent->( 'other_value')get_inherited。
代わりに通常のの
  $自己> parent-> other_value();
あなたの属性述語メソッドがある場合、その属性がそのオブジェクトに設定されているかどうかを報告する。述語が親から継承される可能性のある値を認識しません。これは、$オブジェクト - > has_valueは$オブジェクト - >値が(親から継承)の値を返すにもかかわらずfalseを返すことができることを意味する。
同様に、属性の明確な方法は、(もしあれば)のみ、このオブジェクトの属性をクリアだろう、と親オブジェクトに影響を与えることはない。
の書式の
 パッケージMyClassの。
 ムースを使用します。
 )(のMooseX :: AttributeTreeを使用します。
  =>(親を持ち
  => 'RW'です、
  ISA => 'オブジェクト'、
  weak_ref => 1、
 )。
  =>(値を持っている
  => 'RW'です、
 特質=> [QW / TreeInherit /]、
 );
の要件の
- のPerlます。
コメントが見つかりません