我想要一个带有可修改字段的不可变对象,以便$foo->bar()
返回bar
of foo
,并$foo->bar(42)
返回一个设置为 42的新对象,保持原样。bar
$foo
当然,我可以用 Moo[se] 做到这一点:
package Foo;
use Moo;
has bar => is => 'lazy', builder => sub { 0 };
around bar => sub {
my ($orig, $self, $set) = @_;
if (@_ < 3) {
return $orig->($self);
} else {
return (ref $self)->new( %$self, bar => $set );
}
};
但这有点乏味,那么是否有一个模块可以添加具有此类签名的访问器?