नहीं, यह एक विशेषता redeclare करने के लिए संभव नहीं है - लेकिन आप वर्ग के BUILD
submethod का उपयोग कर इसे प्रारंभ कर सकते हैं:
role A {
has $.a;
}
class B does A {
submethod BUILD(:$!a = 'default') {}
}
ध्यान दें कि आप सिर्फ BUILD
के मुख्य भाग में मूल्य निर्धारित करते हैं के माध्यम से
class B does A {
submethod BUILD { $!a = 'default' }
}
अपने हस्ताक्षर के स्थान पर उपयोगकर्ता B.new(a => 42)
माध्यम से एक नामित प्रारंभकर्ता प्रदान करके डिफ़ॉल्ट अधिलेखित करने में सक्षम नहीं होगा।
role A[$d] {
has $.a = $d;
}
class B does A['default'] {}
:
एक और, और अधिक सुरुचिपूर्ण दृष्टिकोण है कि विशेष रूप से उपयोगी है अगर डिफ़ॉल्ट सेटिंग कुछ आप एक बहुत कुछ (यानी डिफ़ॉल्ट मान भूमिका के इंटरफ़ेस के भाग के रूप में माना जा सकता) उम्मीद है कि यह एक पैरामीटर बना रही है
"चूंकि आर में विधियों का उल्लेख $ हो सकता है! वहां ऐसी अस्पष्टता होगी जो विशेषता को संदर्भित किया जाता है।" क्या यह बात कर रही है कि ओपी का दृष्टिकोण क्यों काम नहीं कर सकता है या किसी ऐसे मुद्दे के बारे में जो आपके पहले समाधान के साथ भी उत्पन्न हो सकता है और जिसे आपके दूसरे समाधान (एक पैरामीट्रिक भूमिका का उपयोग) द्वारा हल किया गया है? – raiph