给出一个访问者列表有以下可能吗?如果有可能我如何为每个创建构建器方法,我假设lazy_build属性会这样做?请帮忙
my @accessors= qw/type duration process/; # used 3 as example but the list is about 50
foreach my $accessors (@accessors) {
has $accessors => (
is => 'rw',
isa => 'Str',
lazy_build => 1,
);
}
答案 0 :(得分:3)
是的,这是可能的。记录下这些都是可行的,也很容易进行测试。
作为documented,lazy_build
不会创建构建器;它指定一个属性应该被懒惰地初始化,并且它应该调用一个名为_build_${attr_name}
的构建器。您必须提供名为_build_type
等的自己的构建器方法。
如果您的属性都采用相同的构建器(不太可能,但可能会这样做),请不要说lazy_build
。相反,请说lazy => 1, builder => '_build_stuff'
并实施_build_stuff
以适用于每个案例。但就像我说的那样,这不太可能;事实上,你可以轻松地在循环中使用它实际上是lazy_build
的优势之一。