-3

アクセサのリストが与えられた場合、次のことが可能ですか? それぞれのビルダーメソッドを作成する方法が可能であれば、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,

);
}
4

1 に答える 1

3

はい、可能です。動作するように文書化されており、テストするのは簡単です。

文書化されているように、lazy_buildビルダーは作成されません。属性を遅延初期化する必要があること、および という名前のビルダーを呼び出す必要があることを指定します_build_${attr_name}_build_typeetcと呼ばれる独自のビルダーメソッドを提供する必要があります。

属性がすべて同じビルダーを使用している場合 (可能性は低いですが、そうかもしれません)、 とは言わないでくださいlazy_build。代わりに、ケースごとに機能するように言っlazy => 1, builder => '_build_stuff'て実装します。_build_stuffしかし、私が言ったように、それはありそうもありません。ループで簡単に使用できるという事実は、実際にはlazy_buildの利点の 1 つです。

于 2013-01-08T17:32:27.047 に答える