अभिवादन में कई विरासत में मिला कंस्ट्रक्टर्स के साथ काम,मूस
मैं Moose सीख रहा हूँ और मैं मूस के साथ एक CGI::Application उपवर्ग है, जो तथ्य यह है कि सीजीआई-ऐप पर आधारित नहीं है द्वारा कठिन बना दिया है लिखने के लिए कोशिश कर रहा हूँ मूस।
मेरे अन्य सीजीआई-ऐप उप-वर्गों में, मुझे setup
विधि वाला अभिभावक वर्ग होना पसंद है जो कि बाल वर्ग की प्रतीक तालिका को देखता है और स्वचालित रूप से रनमोड सेट करता है। मुझे लगता है कि मैं एक ही चीज़ को क्लीनर तरीके से प्राप्त करने के लिए मूस की मेटाक्लास सुविधाओं का उपयोग कर सकता हूं।
use MooseX::Declare;
class MyApp::CGI
extends Moose::Object
extends CGI::Application {
method setup {
$self->start_mode('main');
my @methods = map { $_->name } $self->meta->get_all_methods;
$self->run_modes(map { /^rm_(.+)$/ => $_ }
grep { /^rm_/ }
@methods
);
}
}
... और मेरे बच्चे कक्षा में:
use MooseX::Declare;
class MyApp::CGI::Login
extends MyApp::CGI {
method rm_main {
return "it works";
}
}
मैंने महसूस किया कि कारण मेरी runmodes ठीक से सेट नहीं मिल रहे थे क्योंकि setup
है तो यहाँ क्या मैं अपने माता पिता के वर्ग में है सीजीआई-ऐप कन्स्ट्रक्टर द्वारा बुलाया गया, और Moose::Object
मेरी कक्षा में अपना स्वयं का कन्स्ट्रक्टर चिपका रहा है। मैं एक विधि संशोधक के साथ इस का समाधान करने की कोशिश की:
around new {
$self = $orig->(@_);
$self->CGI::Application::new(@_);
}
यह मैं
Can't call method "BUILDARGS" on unblessed reference at ...Moose/Object.pm line 21.
मुझे लगता है देता है, तथापि, कि मैं पूरी तरह से गलत तरीके से इस बारे में जा रहा हूँ, और मूस है जो मैं चाहता हूं उसे प्राप्त करने के लिए एक बेहतर सुविधा है, जिसे मैंने अभी तक नहीं खोजा है।
धन्यवाद। मैं MooseX :: NonMoose को ठीक से काम करने में सक्षम नहीं था, लेकिन मैं अपनी बेस क्लास को कुकबुक से नुस्खा के साथ सीजीआई-ऐप से ठीक से प्राप्त करने में सक्षम था। – friedo
@friedo मेरा जवाब स्वीकार करने के लिए धन्यवाद। मैं सोच रहा हूं कि 'MooseX :: Declare' को' MooseX :: NonMoose 'के साथ अच्छा खेलने के लिए एक तरीका होना चाहिए, लेकिन यह मैं इसे समझ नहीं पाया। –