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;}
这确保在构造函数返回之前读取(并构造)这些属性.
总结以上是内存溢出为你收集整理的perl – Moose:将参数注入施工中全部内容,希望文章能够帮你解决perl – Moose:将参数注入施工中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)