微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl – 如果Moose中没有提供必需属性,如何获得更好的错误消息?

我对穆斯来说是全新的.直到今天,我们的环境都在Perl 5.8.2上,不支持Moose.

我正在研究一些示例,我认为属性上的“required => 1”设置会很方便,但是当我尝试使用该选项时,返回的错误消息实际上并不可用.

这是一个例子:

cat.pl:

#!/usr/bin/perl

{
    package Cat;
    use Moose;
    use Modern::Perl;

    has 'name' => (
        is => 'ro',required => 1,);
    sub meow {
        my $self = shift;
        say 'Meow!';
    }
}

use Modern::Perl;

my $alarm = Cat->new();
$alarm->meow();
$alarm->meow();
$alarm->meow();

当我运行它:

Attribute (name) is required at /app/perl5/perl-5.10.1/lib/site_perl/5.10.1/aix-thread-multi-64all/Class/MOP/Class.pm line 581
        Class::MOP::Class::_construct_instance('Moose::Meta::Class=HASH(0x110ac1a00)','HASH(0x110c3b3c0)') called at /app/perl5/perl-5.10.1/lib/site_perl/5.10.1/aix-thread-multi-64all/Class/MOP/Class.pm line 554
        Class::MOP::Class::new_object('Moose::Meta::Class=HASH(0x110ac1a00)','HASH(0x110c3b3c0)') called at /app/perl5/perl-5.10.1/lib/site_perl/5.10.1/aix-thread-multi-64all/Moose/Meta/Class.pm line 258
        Moose::Meta::Class::new_object('Moose::Meta::Class=HASH(0x110ac1a00)','HASH(0x110c3b3c0)') called at /app/perl5/perl-5.10.1/lib/site_perl/5.10.1/aix-thread-multi-64all/Moose/Object.pm line 28
        Moose::Object::new('Cat') called at cat.pl line 20

如果我们的一个非perl运算符看到类似的错误消息,它们可能会吓坏.我担心他们不会意识到错误消息中的所有5行实际上都是同一错误的一部分.

如果没有提供必需的属性,有没有办法得到一个很好的错误消息?

像croak这样的东西,我可以想象这样的信息:

Attribute (name) is required at cat.pl line 20

再一次,我是Moose的新手,所以这可能是一个我很想念的简单设置.

提前致谢!

解决方法

我想我可能已经找到了解决方案,但我不确定它是否是最佳解决方案.

并且,正如@Tanktalus指出的那样,有一个详细的错误消息是有价值的.

出于我的问题的目的,MooseX::Constructor::AllErrors扩展似乎工作:

#!/usr/bin/perl

{
    package Cat;
    use Moose;
    use MooseX::Constructor::AllErrors;
    use Modern::Perl;

    has 'name' => (
        is => 'ro',);
    sub meow {
        my $self = shift;
        say 'Meow!';
    } 
}

use Modern::Perl;

my $alarm = Cat->new(); 
$alarm->meow(); 
$alarm->meow(); 
$alarm->meow();

在跑步时,我得到:

Attribute (name) is required at cat.pl line 21

这就是我的想法.

由于我对Moose一点都不熟悉,这个扩展是否可以使用,还是会“消除”所有的错误消息?

原文地址:https://www.jb51.cc/Perl/172178.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐