2011-05-29 8 views
8

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

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

विशेष रूप से सादे मूस, मूस + मूसएक्स :: विधि :: हस्ताक्षर, और मूसएक्स :: घोषित करने वाले वर्गों के लिए कक्षाओं के लिए।

उपकरण केवल उन चीजों या विचारों की समस्याओं को पकड़ने के लिए विकसित होने के दौरान उपयोगी होने की आवश्यकता है जो चीजों को काम नहीं करते हैं।

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

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

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; 
+1

+1 मुझे आपका दर्द महसूस होता है। – friedo

+1

ध्यान दें कि मूस टीम भी उन त्रुटियों पर सामुदायिक प्रतिक्रिया पर निर्भर करती है जिन्हें पकड़ा जा सकता है। एक स्टैकट्रैक अक्सर आवश्यकतानुसार अधिक जानकारी प्राप्त करता है, लेकिन यह सुनिश्चित करता है कि यह आमतौर पर बहुत कम नहीं होता है। एक बेहतर त्रुटि संदेश आमतौर पर एक स्वागत सुविधा अनुरोध है। – phaylon

+1

@ फीयलॉन आप शायद सही हैं, लेकिन मैं चाहता हूं कि मेरे सॉफ़्टवेयर को लेखकों के मुकाबले उपयोगकर्ताओं के लिए डिज़ाइन किया गया हो। – Schwern

उत्तर

4

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

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

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

आप उन्हें %INC चर traversing द्वारा पा सकते हैं:

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

for (sort keys %INC) { 
    s{\.pm$}{}; 
    s{/}{::}g; 
    print "$_\n" if /^(Class::MOP|Moose|MooseX)\b/; 
} 
+1

यह चालाक है। मैं इसका उपयोग करूंगा, लेकिन यह हमेशा मेरे स्रोत में त्रुटियों को स्थानीयकृत नहीं करेगा। – Alex

+1

यह एक शानदार मॉड्यूल बना देगा। *संकेत संकेत* – Schwern

2

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

2

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 
    } 
} 
संबंधित मुद्दे