使用Attribute :: Native :: Trait处理程序可以很容易地处理从变量调用到对象调用的内部变量。但是,你如何处理多个数据结构?我想不出任何方式来处理像下面这样的东西,而不需要存储My :: Stash :: Attribute对象的arrayref,而这个对象又包含My :: Stash :: Subattribute对象的arrayref,它包含一个arrayref My :: Stash :: Instance对象。这包括大量的搜集和强制每个级别的数据,因为我把事情搞清楚了。用于多维数据结构的驼鹿特征
是的,我可以将项目作为平面数组存储,然后在每次读取时对其进行grep,但在频繁读取的情况下,大多数调用是读取,对大量数组项进行grepping是很多处理每一次阅读都只是以需要的方式索引内部项目。
是否有一个MooseX扩展可以通过处理程序创建方法来处理这类事情,而不仅仅是将读取存储器视为hashref并将其修改到位?或者我最好忘记通过方法调用来做这样的事情,只是现在就这样做?
use strict;
use warnings;
use 5.010;
package My::Stash;
use Moose;
has '_stash' => (is => 'ro', isa => 'HashRef', default => sub { {} });
sub add_item {
my $self = shift;
my ($item) = @_;
push @{$self->_stash->{$item->{property}}{$item->{sub}}}, $item;
}
sub get_items {
my $self = shift;
my ($property, $subproperty) = @_;
return @{$self->_stash->{$property}{$subproperty}};
}
package main;
use Data::Printer;
my $stash = My::Stash->new();
for my $property (qw/foo bar baz/) {
for my $subproperty (qw/fazz fuzz/) {
for my $instance (1 .. 2) {
$stash->add_item({ property => $property, sub => $subproperty, instance => $instance })
}
}
}
p($_) for $stash->get_items(qw/baz fuzz/);