【问题标题】:Useful errors for Moose and MooseX::DeclareMoose 和 MooseX::Declare 的有用错误
【发布时间】:2011-09-04 12:03:28
【问题描述】:

Moose 非常可爱,但有时简单的拼写错误会导致令人毛骨悚然的长堆栈跟踪,在我看来,有用的内容为零。

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

特别是对于使用普通 Moose、Moose+MooseX::Method::Signatures 和 MooseX::Declare 的类。

这些工具只需要在开发过程中提供帮助,以捕捉那些使事情无法正常工作的错字或思考问题。

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

根据下面的建议,我正在使用这个 not-quite-a-module-yet,这可以稍微减轻我的头痛,但欢迎提供更多想法:

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;

【问题讨论】:

  • 请注意,Moose 团队还依赖社区对可能被捕获的错误的反馈。堆栈跟踪通常比所需的信息多得多,但它确保它通常不会太少。更好的错误消息通常是受欢迎的功能请求。
  • @phaylon 你可能是对的,但我宁愿我的软件是为用户设计的,而不是为作者设计的。
  • 我现在发现了同样的问题 - 似乎这主要处于开发的“观望”阶段:stackoverflow.com/questions/4341116/…

标签: perl moose


【解决方案1】:

我前段时间尝试过的一种方法是将 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/;
}

【讨论】:

  • 这很狡猾。我会使用它,但它不会总是将我的源代码中的错误本地化。
  • 这将是一个很棒的模块。 提示提示
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多