يمكن أن
فصول ترث سمات من الطبقات الأم. لكن في بعض الأحيان كنت تريد سمة لتكون قادرة على وراثة قيمتها من الكائن الأصل. على سبيل المثال، هذه هي الطريقة التي تعمل الأنماط CSS في HTML.
MooseX :: AttributeTree هو وحدة بيرل الذي يسمح لك لتطبيق سمة TreeInherit إلى أي سمة في صفك على & nbsp؛ وهذه تغير الطريقة التي يعمل طريقة استرجاع السمة ل. عند قراءة قيمة السمة، وإذا لم يتم تحديد قيمة للسمة في هذا الكائن، فإن استرجاع إرجاع قيمة من الكائن الأصل (والتي قد تكون موروثة نفسه).
الكائن الأصل لا تحتاج إلى أن تكون من نفس النوع ككائن الطفل، ولكنه يجب أن يكون الأسلوب مع نفس اسم طريقة استرجاع السمة في (إلا إذا كنت توفير fetch_method). (طريقة الوالد قد يكون وسيلة السمة استرجاع، ولكن لا يجب أن تكون.) إذا لم يكن الوالد الطريقة الصحيحة، ستحصل على خطأ وقت التشغيل إذا حاول الطفل أن نسميها.
افتراضيا، MooseX :: AttributeTree تتوقع الحصول على الكائن الأصل بالدعوة طريقة الوالد الكائن. ومع ذلك، يمكنك استخدام أي وسيلة لاسترداد ارتباط ذلك بتمرير parent_link مناسبة للسمة TreeInherit:
على & nbsp؛ له سلف => (
على & nbsp؛ هو => 'RW،
على & nbsp؛ عيسى => 'الكائن'،
على & nbsp؛ weak_ref => 1،
ونبسب؛)؛
على & nbsp؛ له قيمة => (
على & nbsp؛ هو => 'ريال عماني،
على & nbsp؛ الصفات => [TreeInherit => {parent_link => 'السلف'}]،
ونبسب؛)؛
إذا إرجاع الأسلوب نديف، ثم الميراث يتوقف وسوف استرجاع تتصرف مثل استرجاع العادي. (عادة، parent_link سوف يكون اسم طريقة السمة استرجاع، ولكن لا يجب أن تكون.)
في بعض الأحيان انها ليست مريحة للالكائن الأصل أن يكون وسيلة منفصل لكل السمة التي كائن الطفل قد ترغب في وراثة. في هذه الحالة، يمكنك توفير fetch_method إلى سمة TreeInherit.
على & nbsp؛ لديها other_value => (
على & nbsp؛ هو => 'ريال عماني،
على & nbsp؛ الصفات => [TreeInherit => {fetch_method => 'get_inherited'}]،
ونبسب؛)؛
مع fetch_method، فإن قيمة الموروثة تأتي من
ونبسب؛ $ الذاتي> بها الاباء> get_inherited ('other_value')؛
بدلا من المعتاد
ونبسب؛ $ الذاتي> بها الاباء> other_value ()؛
إذا السمة الخاصة بك لديه طريقة المسند، فإنه تقارير ما إذا كان قد تم تعيين السمة على هذا الكائن. المسند ليس لديه علم بأي القيمة التي قد تكون موروثة من أحد الوالدين. وهذا يعني أن مبلغ object-> has_value قد ترجع كاذبة على الرغم $ object-> قيمة سيعود قيمة (الموروثة من الأم).
وبالمثل، فإن طريقة أكثر وضوحا سمة (إن وجدت) واضحة السمة فقط على هذا الكائن، وسوف يؤثر أبدا الكائن الأصل.
موجز
على & nbsp؛ حزمة MyClass.
على & nbsp؛ استخدام موس.
على & nbsp؛ استخدام MooseX :: AttributeTree ()؛
على & nbsp؛ له الوالد => (
على & nbsp؛ هو => 'RW،
على & nbsp؛ عيسى => 'الكائن'،
على & nbsp؛ weak_ref => 1،
ونبسب؛)؛
على & nbsp؛ له قيمة => (
على & nbsp؛ هو => 'RW،
على & nbsp؛ الصفات => [QW / TreeInherit /]،
ونبسب؛)؛
المتطلبات:
بيرل
لم يتم العثور على التعليقات