類可以繼承父類的屬性。但有時想要的屬性,以便能夠從父對象繼承其值。例如,這是CSS樣式的HTML是如何工作的。
MooseX :: AttributeTree是一個Perl模塊,可以讓你的TreeInherit特性適用於任何屬性,類 這改變了屬性的訪問方法的工作方式。當讀取屬性的值,如果沒有值已被設置為在該對象中的屬性,所述存取器將返回從父對象的值(其本身可能被繼承)。
父對象不需要是相同類型的子對象,但必須有一種方法以相同的名稱屬性的訪問方法(除非提供一個fetch_method)。 (母公司的方法可能是一個屬性訪問器方法,但它並不一定要。)如果家長不具備正確的方法,如果孩子試圖調用它,你會得到一個運行時錯誤。
默認情況下,MooseX :: AttributeTree希望通過調用該對象的父類的方法來獲取父對象。但是,你可以使用任何方法,通過傳遞適當的parent_link到TreeInherit特徵檢索鏈接:
 擁有祖先=>(
 是=>'RW“,
  ISA =>'對象',
  weak_ref => 1,
&NBSP);
 擁有價值=>(
 是=>'RO',
 特質=> [TreeInherit => {parent_link =>'祖先'}],
&NBSP);
如果該方法返回undef,然後繼承停止,訪問會像一個正常的訪問。 (通常,parent_link將一個屬性存取方法的名稱,但它並不必須如此。)
有時,這不是方便父對象有一個單獨的方法為每個屬性的子對象可能要繼承。在這種情況下,你可以提供一個fetch_method到TreeInherit特質。
 擁有other_value =>(
 是=>'RO',
 性狀=> [TreeInherit => {fetch_method>'get_inherited'}],
&NBSP);
隨著fetch_method,繼承值將來自
  $自我>父 - > get_inherited('other_value');
而不是通常的
  $自我>父 - > other_value();
如果你的屬性有一個判斷方法,它報告是否已將該屬性設置對象。謂詞沒有知識,可能從父繼承任何值。這意味著,$對象 - > has_value可能返回false,即使$對象 - >值會返回一個值(從父繼承)。
同樣地,屬性的更清晰的方法(如有的話)將清除只有在此對象中的屬性,並且絕不會影響到一個父對象。
大綱
 包MyClass的;
 使用駝鹿;
 使用MooseX :: AttributeTree();
 有家長=>(
 是=>'RW“,
  ISA =>'對象',
  weak_ref => 1,
&NBSP);
 擁有價值=>(
 是=>'RW“,
 特質=> [QW / TreeInherit /]
 );
要求:
- 在Perl中
評論沒有發現