arrays - Moose 阵列属性 : how do I use a set method?

标签 arrays perl moose traits

我想定义一个数组作为类的属性,并在类实例化时用一些数据填充它。

我认为可以使用 $self->attribute->set($id, $value)方法以便在给定索引上设置元素。至少这是我从驼鹿身上了解到的documentation .

但是当我尝试

use Data::Dumper qw( Dumper );
use Moose;

has cells => (
    is => 'rw',
    traits  => ['Array'],
    isa     => 'ArrayRef',
    default => sub { [] },
);

my $app = __PACKAGE__->new();
$app->cells->set($_, $_) for 0..3;
print(Dumper($app->cells));

我得到
Can't call method "set" on unblessed reference

我该怎么做 set工作?

最佳答案

use Data::Dumper qw( Dumper );
use Moose;

has cells => (
    is => 'rw',
    traits  => ['Array'],
    isa     => 'ArrayRef',
    default => sub { [] },
    handles => {                   # <---
       set_cell => 'set',          # <---
    },                             # <---
);

my $app = __PACKAGE__->new();
$app->set_cell($_, $_) for 0..3;   # <---
print(Dumper($app->cells));

尽管评论中有相反的说法,但它在 BUILD 中运行良好也。
use Data::Dumper qw( Dumper );
use Moose;

has cells => (
    is => 'rw',
    traits  => ['Array'],
    isa     => 'ArrayRef',
    default => sub { [] },
    handles => {
       set_cell => 'set',
    },
);

sub BUILD {
    my ($self) = @_;
    $self->set_cell($_, $_) for 0..3;
}

my $app = __PACKAGE__->new();
print(Dumper($app->cells));

关于arrays - Moose 阵列属性 : how do I use a set method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896629/

相关文章:

arrays - 用于嵌入式集合的 MongoDB 首选模式。文档与数组

php - 使用 PHP 和 MySQL 按多种类型对事件进行排序。

arrays - 如何取消引用这个数组?我如何将这个数组存储到散列中?

perl - Jenkins/Hudson 没有捕获 Perl 脚本错误

perl - 动态加载 Perl 模块

c++ - 二维数组指针的存储方式是什么?

java - 从 Java 7 中的 ArrayList 中删除备用元素

perl - 如何确定 Perl 哈希是否包含到未定义值的键映射?

perl - 如何用驼鹿正确打开管道?

perl - 引用 Perl/Moose 包名称的简写?