覆盖类"is"属性(Moose)

Ste*_*ieD 5 perl moose

我试图将一个ro属性子类化,使它rw像这样:

has '+content' => (is => 'rw');
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.这不可能吗?

far*_*ane 1

您应该将对象定义为只读,然后提供私有写入器

#!/usr/bin/perl
use Modern::Perl;

{
    package Foo;
    use Moose;

    has bar => (
      is     => 'ro',
      writer => '_set_bar',
  );

}

my $foo = Foo->new;
Run Code Online (Sandbox Code Playgroud)

然后,如果您尝试这样做,$foo->bar('something');您将收到您在评论中提到的错误Cannot assign a value to a read-only accessor,这就是您需要的魔法,$foo->_set_bar('something');
感谢继承,它将在 Moose 框架中工作。