perl – 如果Moose中没有提供必需属性,如何获得更好的错误消息?
发布时间:2020-12-15 21:49:58 所属栏目:大数据 来源:网络整理
导读:我对穆斯来说是全新的.直到今天,我们的环境都在Perl 5.8.2上,不支持Moose. 我正在研究一些示例,我认为属性上的“required = 1”设置会很方便,但是当我尝试使用该选项时,返回的错误消息实际上并不可用. 这是一个例子: cat.pl: #!/usr/bin/perl{ package Cat
我对穆斯来说是全新的.直到今天,我们的环境都在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一点都不熟悉,这个扩展是否可以使用,还是会“消除”所有的错误消息? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |