覆盖类“is”属性(Moose)

时间:2017-02-06 22:10:42

标签: perl moose

我正在尝试将ro属性子类化为rw,如下所示:

has '+content' => (is => 'rw');

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

1 个答案:

答案 0 :(得分:1)

您应将一个对象定义为只读,然后提供一个私有编写器

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

{
    package Foo;
    use Moose;

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

}

my $foo = Foo->new;

然后,如果您尝试$foo->bar('something');,则会收到注释Cannot assign a value to a read-only accessor中提到的错误,这就是您需要的$foo->_set_bar('something');的妙处
多亏了继承,它将可以在整个Moose框架中正常工作。