加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – Moose:将参数注入施工中

发布时间:2020-12-16 06:18:23 所属栏目:大数据 来源:网络整理
导读:我有一个附加验证的文件名属性.现在,在构造期间未指定文件名时,我想从配置文件中读取它. subtype 'filename' = as 'Str' = where { -r $_ } = message { "$_ is not a readable file" };has 'students_file' = ( is = 'rw',isa = 'filename',default = '' );
我有一个附加验证的文件名属性.现在,在构造期间未指定文件名时,我想从配置文件中读取它.

subtype 'filename'
        => as 'Str'
        => where { -r $_ }
        => message { "$_ is not a readable file" };

has 'students_file' => ( is => 'rw',isa => 'filename',default => '' );
has 'teachers_file' => ( is => 'rw',default => '' );

问题是BUILD似乎在验证发生后运行. BUILDARGS的所有示例似乎都处理了构造对象的不同方式.

那么我应该在哪里阅读配置并设置属性?

解决方法

提供从配置文件设置它们的teachers_file和students_file构建器方法(或内联默认子方法).只有在未将这些属性作为构造函数的键提供时,构建器才会运行(除非使用init_arg => undef来阻止它们在构造函数中设置).

如果您的配置是它自己的属性,并且使用构建器读取配置文件,那么您在config和teachers_file以及students_file之间存在排序问题.您可以通过使teacher_file和students_file延迟属性来解决这个问题,这可以确保它们不会尝试在config属性之前构建.但是,您可能希望确保在构造期间尽早抛出“foo不是可读文件”错误,而不是第一次使用该属性.您可以通过添加来解决这个问题

sub BUILD {
  my $self = shift;
  $self->teachers_file;
  $self->students_file;
}

这确保在构造函数返回之前读取(并构造)这些属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读