חוגים יכולים לרשת תכונות מהכיתות האם שלהם. אבל לפעמים אתה רוצה תכונה להיות מסוגל לרשת הערך שלה מאובייקט אב. לדוגמא, ככה סגנונות CSS לעבוד ב- HTML.
MooseX :: AttributeTree הוא מודול פרל המאפשר לך להחיל את תכונת TreeInherit לכל תכונה בכיתה שלך & nbsp;. זה משנה את דרך שיטת accessor של התכונה עובדת. בעת קריאת הערך של התכונה, אם אין לו ערך נקבע לתכונה באובייקט זה, accessor תחזיר את הערך מאובייקט האב (שעשוי להיות תורשתי עצמו).
אובייקט ההורה לא צריך להיות מאותו הסוג כאובייקט הילד, אבל הוא חייב לקבל שיטה עם אותו שם כמו שיטת accessor של התכונה (אלא אם כן אתה מספק fetch_method). (השיטה של ההורה עשויה להיות שיטת תכונת accessor, אבל זה לא צריך להיות.) אם ההורה אין שיטה הנכונה, תקבל את שגיאת זמן ריצה אם הילד מנסה לקרוא לזה.
כברירת מחדל, 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 תתנהג כמו accessor נורמלית. (בדרך כלל, parent_link יהיה שמו של שיטת תכונת accessor, אבל זה לא צריך להיות.)
לפעמים זה לא נוח לאובייקט ההורה ליש שיטה נפרדת לכל תכונה שאובייקט ילד עשוי רוצה לרשת. במקרה זה, אתה יכול לספק fetch_method לתכונת TreeInherit.
& Nbsp; יש other_value => (
& Nbsp; הוא = 'ro ">,
& Nbsp; תכונות => [TreeInherit => {fetch_method => 'get_inherited'}],
& Nbsp;);
עם fetch_method, הערך בירושה יגיע מ
& Nbsp; $ עצמיים> הורה-> get_inherited ('other_value');
במקום הרגיל
& Nbsp; $ עצמיים> הורה-> 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
תגובות לא נמצא