में मौजूदा ऑब्जेक्ट में नई विधि जोड़ें मेरे पास यह perl ऑब्जेक्ट है। ऑब्जेक्ट को तुरंत चालू करने के बाद, मैं एक लोडर विधि के भीतर ऑब्जेक्ट में एक नई विधि जोड़ने की कोशिश कर रहा हूं, जिसे बाद में कहा जा सकता है।perl
मैंने उन चीजों का पूरा समूह आजमाया है जो काम नहीं कर चुके हैं। उदाहरणों में शामिल हैं:
sub loader {
my ($self) = @_;
sub add_me {
my ($self, $rec) = @_
warn "yayyyyyy";
return $rec;
}
#here are the things I've tried that dont work:
# &{$self->{add_me}} = \&add_me;
# \&{$self->{add_me}} = \&add_me;
# assuming the class definition is in Holder::Class try to add it to symblol table
# *{Holder::Class::add_me} = \&add_me;
}
संपादित करें:
कारण यह है कि मैं इस मैं अपने कोड में एक हुक जोड़ रहा है जहाँ मेरे सॉफ्टवेयर के उपयोगकर्ता अपने स्वयं के इंजेक्षन करने की क्षमता होगी है क्या करने की जरूरत डेटा संरचना को संपादित करने के लिए उप-जैसा होगा।
sub inject_a_sub {
my ($self, $rec) = @_;
#do stuff to $rec
return $rec;
}
तो अपने मूल ऑब्जेक्ट के अंदर
पर:
ऐसा करने के लिए, वे कुछ की तरह एक माध्यमिक फ़ाइल है कि केवल एक उप होते हैं और में पारित प्रश्न में डेटा संरचना मिल जाएगा संपादित करने में सक्षम हो जाएगा, तो इसकी तात्कालिकता, मैं यह देखने के लिए जांच करता हूं कि उपर्युक्त फ़ाइल मौजूद है या नहीं, और यदि इसकी सामग्री पढ़ी जाती है और उन्हें eval। आखिरकार, मैं eval'd कोड बनाना चाहता हूं जो सिर्फ एक उप, मेरी वस्तु का एक तरीका है। सटीक होने के लिए, मेरी ऑब्जेक्ट पहले से ही do_something
नामक एक विधि को विरासत में ले रही है और मैं do_something
विरासत में प्राप्त होने वाली विधि को ओवरराइड करके उप-पठन करना चाहता हूं ताकि बाहरी फ़ाइल से उप को कॉल किया जा सके।
इसकी एक अजीब समस्या:/
और यह दर्द होता है मुझे :(
ओबी वॉन केनोबी तुम मेरे ही उम्मीद कर रहे हैं
चीयर्स
आप विशिष्ट वस्तुओं के लिए अतिरिक्त विधियों को जोड़ना चाहते हैं, कक्षा की सभी वस्तुओं के लिए नहीं? क्या कोई कारण है कि आप उपclass नहीं कर सकते हैं? – ysth
ऑब्जेक्ट्स में विधियां नहीं हैं, कक्षाओं में विधियां हैं। – ikegami
@ikegami: यह आपके मॉडल पर निर्भर करता है। आप सभी * वास्तव में * परवाह है कि एक उदाहरण में सभी वर्ग हैं जो इसकी कक्षा द्वारा निर्दिष्ट हैं। रूबी में दोनों वर्ग विधियां हैं (जिन्हें केवल एक वर्ग पर लागू किया जा सकता है, उदाहरण पर नहीं) और उदाहरण विधियों, जिन्हें कक्षा में परिभाषित किया गया है लेकिन केवल उस वर्ग के उदाहरणों के माध्यम से उपलब्ध हैं। इसमें * सिंगलटन विधियां भी हैं जो एक दिए गए उदाहरण के लिए अद्वितीय हैं, जो इस ओपी की आवश्यकता है। – Borodin