私たちのクラスには、計算された値を表す属性を作成するパターンがあります。明らかな理由から、計算された値をキャッシュし、基になる値の 1 つが変更されたときにキャッシュを無効にしたいと考えています。
したがって、現在これがあります:
package FooBar;
use Moose;
has 'foo' => (
accessor => {
'foo' => sub {
my $self = shift;
if (@_ > 0) {
# writer
$self->{foo} = $_[0];
# reset fields that are dependant on me
$self->{bar} = undef;
}
# reader part;
return $self->{foo};
}
}
);
has 'bar' => (
accessor => {
'bar' => sub {
my $self = shift;
if (@_ > 0) {
# writer
$self->{bar} = $_[0];
}
# reader part;
$self->{bar} = calculate_bar($self->foo, $self->baz)
if (not defined($self->{bar}));
return $self->{bar};
}
}
);
sub calculate_bar { ... }
計算された値が他の計算された値に依存する場合、この長時間の方法は非常に面倒でエラーが発生しやすくなります。
「バー」が依存する属性を監視するためのよりスマートでシンプルな方法と、「foo」が依存している人を知る方法はありますか? また、ハッシュメンバーアクセスを介してバーを設定しないようにするにはどうすればよいですか?