私のMooベースのクラスには、両方default
とcoerce
サブを持つレイジー属性と非レイジー属性の両方があります。属性を初期化しないと、default
とsubsの両方が通常の属性に対して呼び出されますが、怠惰な属性に対してcoerce
のみ呼び出されます。default
それは矛盾しているようです。サンプルコードは次のとおりです。
package Foo;
use Moo;
has nrml => ( is => 'ro',
default => sub { print "nrml default\n" },
coerce => sub { print "nrml coerce\n" }
);
has lazy => ( is => 'ro',
lazy => 1,
default => sub { print "lazy default\n" },
coerce => sub { print "lazy coerce\n" }
);
my $q = Foo->new( );
$q->lazy;
出力は次のとおりです。
nrml default
nrml coerce
lazy default
coerce
コンストラクターで値を指定した場合にのみ実行されることを期待しています。さらに重要なことに、レイジー属性と通常の属性の両方から同じ実行シーケンス(またはと)が期待さdefault
れます。default
coerce
それで、私の期待は外れていますか、これはバグですか、それとも何ですか?ありがとう!