使用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/);