इस साधारण वर्ग पर विचार करें:मैं मूस से संरचित अपवाद कैसे प्राप्त कर सकता हूं?
package Foo;
use Moose;
has foo => (is => 'rw', isa => 'Int');
और फिर यह कोड:
use Try::Tiny;
use Foo;
my $f = try {
Foo->new(foo => 'Not an Int');
}
catch {
warn $_;
};
कोड विफल बाधाओं के बारे में एक अच्छा बड़ा त्रुटि संदेश के साथ मर जाता है।
मैं निकालने में सक्षम होना चाहता हूं कि कौन सा गुण विफल रहा (foo
), क्या कारण था (असफल प्रकार की बाधा) और क्या मूल्य पारित किया गया था (Not an Int
) जानकारी प्राप्त करने के लिए त्रुटि स्ट्रिंग को पार्स किए बिना।
कुछ ऐसा है:
catch {
if($_->isa('MooseX::Exception::TypeConstraint')) {
my $attrib = $_->attribute;
my $type = $_->type;
my $value = $_->bad_value;
warn "'$value' is an illegal value for '$attrib'. It should be a $type\n";
}
else {
warn $_;
}
};
क्या यह संभव है? क्या कोई मूसएक्स वितरण है जो ऐसा कर सकता है? बेहतर अभी तक, क्या कुछ मूस फीचर है जो मुझे याद आई है जिससे यह संभव हो जाएगा?
अद्यतन: मुझे विशेष रूप से प्रकार की बाधाओं में दिलचस्पी है, लेकिन अन्य मूस त्रुटियां भी बहुत अच्छी होंगी। मुझे यह भी पता है कि मैं die
के साथ वस्तुओं को फेंक सकता हूं। तो, मैं लिखने वाले कोड में अपवादों को व्यवस्थित करना अपेक्षाकृत आसान है।
यह बहुत दिलचस्प है।यह MooseX :: थ्रोबल जैसा काम करता है लेकिन अपवाद :: कक्षा पर बनाया गया है और अपवाद वर्ग पदानुक्रम की शुरुआत को परिभाषित करता है। आंतरिक रूप से, यह निर्धारित करने के लिए त्रुटि संदेश का विश्लेषण करता है कि फेंकने के लिए किस प्रकार का अपवाद है। – daotoad
दुर्भाग्यवश इसे थोड़ी देर के लिए अपडेट नहीं किया गया है, और इसके परीक्षणों को हर जगह काफी विफल करता है। –