1
中調用方法我有一類設置屬性如下:如何建設者
has _data => (
is => 'ro',
lazy => 1,
builder => '_load',
);
sub _load {
my $self = shift;
return retrieve $self->_file;
}
但是我現在想返回數據之前調用的類已經定義的方法。
在老派的Perl OO,我會做這樣的事情:
sub _load {
# Assuming laziness is implemented somewhere else.
my $self = shift;
$self->{_data} = retrieve $self->_file;
$self->refresh; # which does something with $self->{_data}
return $self->{_data};
}
但我不能想出一個「乾淨」的方式穆斯做到這一點。
我認爲以下,但認爲他們是相當難看,而且必須有這樣做的更好的方法。
- 如果我讓
_data
讀寫,我可能會在數據寫入訪問,調用該方法然後從訪問返回值駝鹿寫回存取。 - 如果我把它變成一個普通的舊方法,那麼我必須定義另一個屬性,比如
_raw_data
,將數據存儲在那裏,修改refresh()
以使用該屬性,其他所有使用_data()
。 - 破壞封裝和直接訪問底層
$self->{_data}
。
我試過after '_load' => \&refresh;
,但那只是創建了一個無限循環。