Como redefinir os métodos de classe Perl? <, / A>
A questão "Como posso corrigir um método de instância no Perl?" me fez pensar. Posso redefinir dinamicamente os métodos Perl? Digamos que eu tenha uma classe como esta:
package MyClass;
sub new {
my $class = shift;
my $val = shift;
my $self = { val=> $val};
bless($self, $class);
return $self;
};
sub get_val {
my $self = shift;
return $self->{val}+10;
}
1;
E digamos que adicionar dois números é realmente car
Gostaria de modificar a classe para que $ val + 10 seja computado apenas na primeira vez em que chamo o método nesse objeto. Chamadas subsequentes ao método retornariam um valor em cach
Eu poderia modificar facilmente o método para incluir o cache, mas:
Tenho vários métodos como est Prefiro não sujar esse métodO que eu realmente quero fazer é especificar uma lista de métodos que eu sei que sempre retornam o mesmo valor para uma determinada instância. Desejo pegar essa lista e passá-la para uma função para adicionar suporte a cache para esses métodos
Existe uma maneira eficaz de conseguir isso?
Acompanhamento. O código abaixo funciona, mas como use strict não permite referências por string, não estou 100% onde quero estar.
sub myfn {
printf("computing\n");
return 10;
}
sub cache_fn {
my $fnref = shift;
my $orig = $fnref;
my $cacheval;
return sub {
if (defined($cacheval)) { return $cacheval; }
$cacheval = &$orig();
return $cacheval;
}
}
*{myfn} = cache_fn(\&myfn);
Como faço para modificar para fazer isso:
cache_fn(&myfn);