perl – 如果Moose构建器方法失败,该怎么办?

前端之家收集整理的这篇文章主要介绍了perl – 如果Moose构建器方法失败,该怎么办?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在构建器方法中处理故障的最佳方法是什么?

例如:

package MyObj;
use Moose;
use IO::File;

has => 'file_name'   ( is => 'ro',isa => 'Str',required   =>1  );
has => 'file_handle' ( is => 'ro',isa => 'IO::File',lazy_build => 1 );

sub _build_file_handle {
    my $self = shift;
    my $fh = IO::File->new( $self->file_name,'<' );

    return $fh;
}

如果_build_file_handle无法获取句柄,构建器将返回undef,否则类型约束失败.

我可以在file_handle类型约束中使用union,这样它将接受一个undef作为一个有效的值.但是,即使值为undef,谓词has_file_handle将返回true.

有没有办法表明构建器失败,属性应该保持清除?

解决方法

“最好的”是主观的,但你必须决定哪一个更适合你的代码

>如果在文件句柄无法构建时(即,它是可恢复的条件)可以继续执行代码,构建器应返回undef并将类型约束设置为“可能[IO :: File]”.这意味着,每当使用该属性时,您还必须检查该属性的定义.您还可以检查此属性是否在BUILD中正确构建,并选择在该点进行进一步的操作(如他在评论中提到的F​​riedo),例如调用clear_file_handle(如果它是undef)(因为构建器总是为属性赋值,假设它不会死).
>否则,让构建器失败,无论是通过显式地抛出一个异常(你可以选择抓到更高的),或者简单地返回undef并让类型约束失败.无论哪种方式你的代码都会死亡你只需要选择它如何死亡,堆栈跟踪是多么庞大. 原文链接:https://www.f2er.com/Perl/171505.html

猜你在找的Perl相关文章