我的基于 Moo 的类同时具有惰性和非惰性属性,它们同时具有default
和子属性coerce
。如果我不初始化属性,我会发现两个default
和coerce
subs 都被称为普通属性,但只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
)。
那么,我的期望是否偏离了,这是一个错误,还是什么?谢谢!