[Rio-pm] importando métodos?

Eden Cardim edencardim em gmail.com
Terça Novembro 4 21:25:30 PST 2008


2008/11/5 Pedro Henrique <phikeda em gmail.com>:
> Amigos,
>
> alguém sabe se é possível "importar" um método para dentro de um objeto? Por
> exemplo:
>
> package AdicionaMetodo;
>
> sub importar
> {
>     my $objeto = shift;
>     # adiciona a sub "novo" (é possível ???)
> }
>
> sub novo
> {
>    print "alo, mundo!\n";
> }
>
> 1;
>
> package Principal;
> use AdicionaMetodo;
>
> sub new
> {
>     my $class = shift;
>     my $self = {};
>     bless $self, $class;
>
>     AdicionaMetodo::importar($self);
>     return $self;
> }
>
> 1;
>
> e agora no meu programa posso fazer:
>
> use Principal;
>
> my $objeto = Principal->new();
> $objeto->novo();  # exibe "alo, mundo!"
>
>
> Só consigo fazer adicionando referência à minha função, mas nesse caso o
> programa fica mais ou menos assim:
>
> $objeto->{novo}->();
>
> e eu queria que fosse como um método mesmo:
>
> $objeto->novo();
>
>
> Alguém pode me dar uma luz?

Bom, se fosse JavaScript dava, mas no perl você só pode criar um
método para a classe inteira (não pro objeto), os gurus dos internals
podem me corrigir aqui. Mas a principal pergunta é: porque você quer
fazer isso?

Um meio-termo seria criar um método de acesso que fizesse a
dereferenciação por você

sub novo {
  shift->{novo}->(@_)
}

-- 
edenc.vox.com


Mais detalhes sobre a lista de discussão Rio-pm