मूस बहुत प्यारा है, लेकिन कभी-कभी साधारण टाइपो मेरे दृष्टिकोण से, शून्य उपयोगी सामग्री के साथ बालों को बढ़ाने वाले रोमांचक लंबे स्टैकट्रैस का कारण बन सकते हैं।

तो, क्या इस विस्फोट की व्याख्या करने के लिए कोई उपयोगी उपकरण हैं?

विशेष रूप से सादे मूस, Moose+MooseX::Method::Signatures, और MooseX::Declare का उपयोग करने वाली कक्षाओं के लिए।

टूल को केवल उन टाइपो या थिंको समस्याओं को पकड़ने के लिए विकसित करते समय सहायक होने की आवश्यकता होती है जो चीजों को काम नहीं करते हैं।

========================

नीचे दिए गए सुझावों के बाद, मैं इस नॉट-ए-मॉड्यूल का उपयोग कर रहा हूं-अभी तक जो मेरे सिरदर्द को थोड़ा कम कर रहा है, अधिक विचारों का स्वागत है, हालांकि:

package MooseX::QuietCarping;
# Not actually a Moose thing, but helpful for Moose.
# calm Moose-internal stacktraces down a little
use Carp;

my %retain = ();
sub import {
    my $class = shift;
    $retain{$_}++ for @_;
}

CHECK {
    for (sort keys %INC) {
    s{\.pm$}{};
    s{[/\\]}{::}g; # CROSS PLATFORM MY ARSE
    next if $retain{$_};
    $Carp::Internal{$_}++ if /^(?:Class::MOP|Moose|MooseX)\b/
    }
    %retain = (); # don't need this no more
}

1;
8
Alex 30 मई 2011, 03:59
1
ध्यान दें कि मूस टीम उन त्रुटियों पर सामुदायिक प्रतिक्रिया पर भी निर्भर करती है जिन्हें पकड़ा जा सकता है। एक स्टैकट्रेस अक्सर आवश्यकता से बहुत अधिक जानकारी होती है, लेकिन यह सुनिश्चित करती है कि यह आमतौर पर बहुत कम नहीं है। एक बेहतर त्रुटि संदेश आमतौर पर एक स्वागत योग्य सुविधा अनुरोध होता है।
 – 
phaylon
30 मई 2011, 20:17
1
आप शायद सही हैं, लेकिन मैं चाहूंगा कि मेरा सॉफ़्टवेयर लेखकों के बजाय उपयोगकर्ताओं के लिए डिज़ाइन किया गया हो।
 – 
Schwern
31 मई 2011, 00:30
1
मुझे अब यह प्रश्न उसी तर्ज पर मिला है - ऐसा लगता है कि यह ज्यादातर विकास के 'प्रतीक्षा करें और देखें' चरण में है: stackoverflow.com/questions/4341116/…
 – 
Alex
31 मई 2011, 08:01

3 जवाब

सबसे बढ़िया उत्तर

जिस तरह से मैंने कुछ समय पहले प्रयोग किया था, वह मूस से संबंधित कक्षाओं को %Carp::Internal हैश में डाल रहा है, कुछ इस तरह:

$Carp::Internal{$_}++ for qw{
    Class::MOP
    Class::MOP::Attribute
    Class::MOP::Class
    ...
};

इस तरह की कक्षाओं को स्टैक ट्रेस में छोड़ दिया जाएगा, जिससे यह अधिक कॉम्पैक्ट हो जाएगा और आपके अपने कोड पर जोर दिया जाएगा।

आप उन्हें %INC वेरिएबल को ट्रैवर्स करके ढूंढ सकते हैं:

package Dummy;
use Moose;
use MooseX::Declare;
# use ....;

for (sort keys %INC) {
    s{\.pm$}{};
    s{/}{::}g;
    print "$_\n" if /^(Class::MOP|Moose|MooseX)\b/;
}
4
bvr 30 मई 2011, 13:00
1
वह चालाक है। मैं इसका उपयोग करूंगा, लेकिन यह हमेशा मेरे स्रोत में त्रुटियों का स्थानीयकरण नहीं करेगा।
 – 
Alex
30 मई 2011, 14:52
1
यह एक शानदार मॉड्यूल बना देगा। संकेत संकेत
 – 
Schwern
31 मई 2011, 00:31

मुझे एक या दो सप्ताह पहले stvn द्वारा एक PerlMonks पोस्ट देखकर याद आ रहा है कि वे मूस त्रुटि संदेशों को सुधारने पर काम कर रहे हैं। मुझे नहीं लगता कि वर्तमान में सफाई के लिए कुछ भी उपलब्ध है, हालांकि।

2
Dave Sherohman 30 मई 2011, 13:38

Method::Signatures::Modifiers एक ऐसा पैकेज है जो कुछ समस्याओं को ठीक करने की उम्मीद करता है MooseX::Method::Signatures की समस्याएं। बस use इसे ओवरलोड करने के लिए।

use MooseX::Declare;
use Method::Signatures::Modifiers;

class Foo
{
    method bar (Int $thing) {
        # this method is declared with Method::Signatures instead of MooseX::Method::Signatures
    }
}
2
Joel Berger 31 पद 2011, 19:06