Moose和MooseX :: Declare的有用错误

时间:2011-05-29 23:59:45

标签: perl moose

穆斯非常可爱,但从我的观点来看,有时简单的拼写错误可能导致令人兴奋的令人兴奋的长叠加,无用的内容。

那么,是否有任何工具可以将这种爆炸解释为有用的东西?

特别是对于使用普通Moose,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;

3 个答案:

答案 0 :(得分:4)

我前段时间尝试过的一种方法是将Moose相关类放入%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/;
}

答案 1 :(得分:2)

我似乎记得在一两个星期前看到一个PerlMonks帖子说他们正在努力改进Moose错误消息。不过,我认为目前没有任何东西可用来清理它。

答案 2 :(得分: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
    }
}