के परिप्रेक्ष्य से क्रोक त्रुटि रिपोर्टिंग नहीं, मैंने हाल ही में मूस और इसके महान ओओ ढांचे पर न केवल उपयोग करने के लिए बल्कि नई ओओ अवधारणाओं को सीखने के लिए भी शुरू किया। उन चीजों में से एक जो मैं करना चाहता था, ऑब्जेक्ट सृजन के दौरान कॉलर के परिप्रेक्ष्य से त्रुटि रिपोर्टिंग करना था। मैंने देखा कि मूस में मॉड्यूल मूस है :: त्रुटि :: क्रोक जो मूस को क्रोक कॉल द्वारा डिफ़ॉल्ट त्रुटि रिपोर्टिंग को ओवरराइड करने के लिए कहता है। मैं इसे इस्तेमाल किया है, लेकिन यह मदद करने के लिए नहीं मालूम थामूस :: त्रुटि :: कॉलर
मूस कोड - Foo.pm
package Foo;
use metaclass (
metaclass => 'Moose::Meta::Class',
error_class => 'Moose::Error::Croak',
);
use Moose;
has 'attr1' => (
is => 'rw',
isa => 'Str',
required => '1',
);
no Moose;
1;
मूस कोड - fooser.pl
#!/usr/bin/perl
use strict;
use warnings;
use Foo;
my $foobj = Foo->new();
इस त्रुटि के साथ विफल: विशेषता (ATTR1) मूस :: त्रुटि :: क्रोक का उपयोग नहीं किया जाता है, तो /usr/local/lib/perl/5.8.8/Class/MOP/Class.pm लाइन 364
पर वास्तविक स्टैक ट्रेस से अधिक है जो मूस :: त्रुटि :: क्रोक का उपयोग नहीं किया जाता है। लेकिन यह कॉलर के परिप्रेक्ष्य से इसकी रिपोर्ट नहीं करता है। यदि यह एक पर्ल 5 OO कोड थे और मैं के रूप में Foo.pm था:
package Foo;
use strict;
use warnings;
use Carp;
sub new {
my ($class, %args) = @_;
my $self = {};
if (! exists $args{'attr1'}) {
croak "ERR: did not provide attr1";
}
$self->{'attr1'} = $args{attr1};
bless $self, $class;
return $self;
}
1;
और अगर fooser.pl मार डाला गया था मैं त्रुटि मिली है |:
"ERR: fooser पर ATTR1 नहीं प्रदान की थी .pl लाइन 6 "
जो कॉलर के परिप्रेक्ष्य से है क्योंकि यह लाइन संख्या को इंगित करता है। MOP.pm की लाइन संख्या के बजाय fooser.pl में से 6। 364.
मैं इसे मूस में कैसे कर सकता हूं? या मैं यहाँ कुछ गलत समझ रहा हूँ?
क्रोक के बजाय कबूल का उपयोग करें। डिफ़ॉल्ट कौन सा है। – jrockway
डिफ़ॉल्ट मदद नहीं करता है। यह कॉलर होने वाली अंतिम प्रविष्टि के साथ एक संपूर्ण निशान देता है। जब मैं त्रुटियों को लॉगिंग कर रहा हूं, तो मेरी कॉल में त्रुटि होने पर मूस स्तर के निशान लॉग करना उपयोगी नहीं है। –