เรียนสามารถสืบทอดคุณลักษณะจากคลาสแม่ของพวกเขา แต่บางครั้งคุณต้องการแอตทริบิวต์ที่จะสามารถสืบทอดค่าจากวัตถุแม่ ยกตัวอย่างเช่นที่ว่า CSS รูปแบบการทำงานในรูปแบบ HTML
MooseX :: AttributeTree เป็นโมดูล Perl ที่ช่วยให้คุณสามารถใช้ลักษณะ TreeInherit แอตทริบิวต์ใด ๆ ในชั้นเรียนของคุณ & nbsp;. นี้จะเปลี่ยนวิธีการทำงานวิธีการเข้าถึงของแอตทริบิวต์ เมื่ออ่านค่าของแอตทริบิวต์ถ้าไม่มีค่าที่ได้รับการตั้งค่าสำหรับคุณลักษณะในวัตถุนี้, การเข้าถึงจะกลับค่าจากวัตถุแม่ (ที่ตัวเองอาจจะได้รับมรดก)
วัตถุแม่ไม่จำเป็นต้องเป็นชนิดเดียวกับวัตถุเด็ก แต่จะต้องมีวิธีการที่มีชื่อเดียวกันเป็นวิธีการเข้าถึงของแอตทริบิวต์ (เว้นแต่คุณจะจัดหา fetch_method) (วิธีการของผู้ปกครองอาจจะเป็นวิธีการเข้าถึงแอตทริบิวต์ แต่มันไม่จำเป็นต้องเป็น.) ถ้าผู้ปกครองไม่ได้มีวิธีการที่เหมาะสมที่คุณจะได้รับข้อผิดพลาด runtime ถ้าเด็กพยายามที่จะเรียกมันว่า
โดยค่าเริ่มต้น MooseX :: AttributeTree คาดว่าจะได้รับวัตถุแม่โดยเรียกวิธีการที่ผู้ปกครองของวัตถุ อย่างไรก็ตามคุณสามารถใช้วิธีการใด ๆ เพื่อดึงการเชื่อมโยงโดยผ่าน parent_link เหมาะสมกับลักษณะ TreeInherit:
& nbsp; มีบรรพบุรุษ => (
& nbsp; เป็น => 'RW',
& nbsp; ISA => 'วัตถุ'
& nbsp; weak_ref => 1
& nbsp;);
& nbsp; มีค่า => (
& nbsp; เป็น => 'ro',
& nbsp; ลักษณะ => [TreeInherit => {parent_link => 'บรรพบุรุษ'}]
& nbsp;);
หากวิธีการส่งกลับ undef แล้วหยุดมรดกและการเข้าถึงจะทำตัวเหมือน accessor ปกติ (โดยปกติ parent_link จะเป็นชื่อของวิธีการเข้าถึงแอตทริบิวต์ แต่มันไม่จำเป็นต้องเป็น.)
บางครั้งก็ไม่สะดวกสำหรับวัตถุแม่จะมีวิธีการที่แยกต่างหากสำหรับแต่ละแอตทริบิวต์ที่วัตถุเด็กอาจต้องการที่จะได้รับมรดก ในกรณีที่คุณสามารถจัดหา fetch_method กับลักษณะ TreeInherit
& nbsp; มี other_value => (
& nbsp; เป็น => 'ro',
& nbsp; ลักษณะ => [TreeInherit => {fetch_method => 'get_inherited'}]
& nbsp;);
ด้วย fetch_method มูลค่าสืบทอดจะมาจาก
& nbsp; $ ตนเอง> parent-> get_inherited ('other_value');
แทนการตามปกติ
& nbsp; $ ตนเอง> parent-> other_value ();
ถ้าแอตทริบิวต์ของคุณมีวิธีการวินิจฉัยจะรายงานว่าแอตทริบิวต์ที่ได้รับการตั้งอยู่บนวัตถุที่ คำกริยามีความรู้ที่มีค่าใด ๆ ที่อาจจะได้รับมรดกจากพ่อแม่ไม่มี ซึ่งหมายความว่า $ วัตถุ> has_value อาจกลับเท็จแม้ว่า $ วัตถุ> ค่าจะกลับมาค่า (รับมรดกมาจากพ่อแม่)
ในทำนองเดียวกันวิธีการที่ชัดเจนของแอตทริบิวต์ (ถ้ามี) จะล้างแอตทริบิวต์เฉพาะในวัตถุนี้และจะไม่ส่งผลกระทบต่อวัตถุแม่
สรุป
& nbsp; MyClass แพคเกจ;
& nbsp; ใช้มูส;
& nbsp; ใช้ MooseX :: AttributeTree ();
& nbsp; มีแม่ => (
& nbsp; เป็น => 'RW',
& nbsp; ISA => 'วัตถุ'
& nbsp; weak_ref => 1
& nbsp;);
& nbsp; มีค่า => (
& nbsp; เป็น => 'RW',
& nbsp; ลักษณะ => [QW / TreeInherit /]
& nbsp;);
ต้องการ
- Perl
ความคิดเห็นที่ไม่พบ