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)(因为构建器总是为属性赋值,假设它不会死). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |