3

我想要一个带有可修改字段的不可变对象,以便$foo->bar()返回barof 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 );
    }
};

但这有点乏味,那么是否有一个模块可以添加具有此类签名的访问器?

4

0 回答 0