【发布时间】:2011-07-14 20:20:36
【问题描述】:
使用 Attribute::Native::Trait 处理程序很容易将内部变量从对变量的调用拆分为对对象的调用。但是,如何处理多个数据结构?我想不出任何方法来处理类似下面的事情而不使存储成为 My::Stash::Attribute 对象的数组引用,而这些对象又包含 My::Stash::Subattribute 对象的数组引用,其中包含一个数组引用我的::Stash::Instance 对象。这包括在我整理事情时对堆栈的每一层进行大量的修改和强制数据。
是的,我可以将项目存储为一个平面数组,然后在每次读取时对其进行 grep,但是在频繁读取并且大多数调用都是读取的情况下,对大量数组项进行 grep读取而不是按需要的方式在内部索引项目。
是否有一个 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/);
【问题讨论】:
标签: perl multidimensional-array moose