cap*_*fan 3 arrays perl moose traits
我想将一个数组定义为一个类的属性,并在实例化类时用一些数据填充它.
我认为可以使用$self->attribute->set($id, $value)方法来设置给定索引上的元素.至少这是我从Moose 文档中理解的内容.
但是,当我尝试
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));
Run Code Online (Sandbox Code Playgroud)
我明白了
Can't call method "set" on unblessed reference
Run Code Online (Sandbox Code Playgroud)
我该怎么办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));
Run Code Online (Sandbox Code Playgroud)
尽管在评论中声称相反,但它也可以正常工作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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |