मैं पर्ल और मूस का उपयोग करके सिंगलटन भूमिका लिखने का प्रयास कर रहा हूं। मैं समझता हूं कि एक MooseX :: सिंगलटन मॉड्यूल उपलब्ध है लेकिन हमारे प्रोजेक्ट के लिए एक और सीपीएएन मॉड्यूल की आवश्यकता होने पर हमेशा प्रतिरोध होता है। इसे करने के बाद और थोड़ा परेशानी होने के बाद मैं समझना चाहूंगा कि मेरी विधि क्यों काम नहीं कर रही है। मैंने लिखा सिंगलटन भूमिका निम्नानुसार है:मूस में सिंगलटन भूमिकाएं
package Singleton;
use Moose::Role;
my $_singleInstance;
around 'new' => sub {
my $orig = shift;
my $class = shift;
if (not defined $_singleInstance){
$_singleInstance = $class->$orig(@_);
}
return $_singleInstance;
};
sub getInstance
{
return __PACKAGE__->new();
}
1;
ऐसा लगता है कि केवल एक वर्ग सिंगलटन भूमिका का उपयोग करता है। हालांकि, जब दो कक्षाएं (उदाहरण के लिए कक्षाए और कक्षा बी) दोनों सिंगलटन भूमिका का उपभोग करते हैं, तो ऐसा लगता है कि वे दोनों साझा $ _singleInstance चर का जिक्र कर रहे हैं। अगर मैं क्लास-> getInstance को कॉल करता हूं तो यह क्लास ए ऑब्जेक्ट का संदर्भ देता है। अगर मैं क्लासबी-> कुछ समय बाद उसी स्क्रिप्ट में प्राप्त करता हूं तो यह क्लासए के किसी ऑब्जेक्ट का संदर्भ देता है (भले ही मैंने कक्षा बी के लिए getInstance विधि को स्पष्ट रूप से कहा)। अगर मैं भूमिका का उपयोग नहीं करता हूं और वास्तव में सिंगलटन भूमिका से क्लास ए और क्लासबी में कोड कॉपी और पेस्ट करता हूं तो यह ठीक काम करता प्रतीत होता है। यहाँ क्या चल रहा है?
आपको एहसास है कि 'नया' लपेटना सिर्फ चोट की दुनिया के लिए पूछ रहा है, है ना? – Ether