gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:58:46 24 4
gpt4 key购买 nike

我是 Moose 的新手。直到今天,我们的环境一直使用 Perl 5.8.2,它不支持 Moose。

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

下面是一个例子:

猫.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 运算符(operator)之一看到这样的错误消息,他们可能会吓坏了。恐怕他们不会意识到错误消息中的所有 5 行实际上都是同一错误的一部分。

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

像 croak 之类的东西,我可以想象这样的消息:
Attribute (name) is required at cat.pl line 20

同样,我是 Moose 的新手,所以这可能是我缺少的一个简单设置。

提前致谢!

最佳答案

我想我可能已经找到了满足我的要求的解决方案,但我不确定它是否是最好的解决方案。

而且,正如@Tanktalus 指出的那样,拥有详细的错误消息是有值(value)的。

就我的问题而言,MooseX::Constructor::AllErrors扩展似乎有效:

#!/usr/bin/perl

{
package Cat;
use Moose;
use MooseX::Constructor::AllErrors;
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 cat.pl line 21

这就是我的想法。

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

关于perl - 如果 Moose 中未提供必需的属性,如何获得更好的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5720726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com