変数の呼び出しからオブジェクトの呼び出しへの内部変数の処理を中断するのは、Attribute :: Native :: Traitハンドラを使用すると簡単です。しかし、どのように複数のデータ構造に対処していますか? StashにMy :: Stash :: Attributeオブジェクトのarrayrefを作らずに、以下のような処理をする方法は考えられません。これには配列参照を含むMy :: Stash :: Subattributeオブジェクトの配列参照が含まれていますMy :: Stash :: Instanceオブジェクト。これは、私が物事を並べ替えると、スタックの各レベルのデータを大量に混ぜ合わせて強制します。多次元データ構造のムービー特性
はい、私はフラットな配列としてアイテムを保存してから、読み取りごとにgrepしますが、読み取りが頻繁で、ほとんどの呼び出しが読み取りであるため、配列項目の大きなリストに対してグリッピングすることは、すべての読書は、必要な方法でアイテムを内部的に索引付けするだけです。
読み込みアクセサーをハッシュリファレンスとして扱い、代わりに修正するのではなく、ハンドラーがメソッドを作成することで、このようなことを処理できるMooseX拡張機能がありますか?あるいは、私はこのようなことをメソッド呼び出しでやっていることを忘れて、それをそのままの状態でやっていますか?
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/);