perl – 如何从Moose获得结构化异常?

前端之家收集整理的这篇文章主要介绍了perl – 如何从Moose获得结构化异常?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑这个简单的类:
package Foo;
use Moose;
has foo => ( is => 'rw',isa => 'Int' );

然后这段代码

use Try::Tiny;
use Foo;
my $f = try {
    Foo->new( foo => 'Not an Int' );
}
catch {
    warn $_;
};

代码死了一个很好的大错误消息关于类型约束失败.

我想要提取什么属性失败(foo),原因是什么(失败类型约束)以及传递的值是(不是Int),而不必解析错误字符串以获取信息.

这样的事情

catch {
    if( $_->isa( 'MooseX::Exception::TypeConstraint' ) ) {
         my $attrib = $_->attribute;
         my $type   = $_->type;
         my $value  = $_->bad_value;

         warn "'$value' is an illegal value for '$attrib'.  It should be a $type\n"; 
    }
    else {
         warn $_;
    }
};

这可能吗?是否有MooseX分发可以使这种情况发生?更好的是,有没有一些Moose功能,我错过了会使这成为可能?

更新:我对类型约束特别感兴趣,但其他Moose错误也将非常好.我也知道我可以把对象抛在脑后.所以,我编写的代码中构造异常比较容易.

解决方法

我没有尝试过,但我认为 MooseX::Error::Exception::Class可能是你要找的.

猜你在找的Perl相关文章