[Rio-pm] importando métodos?
Eden Cardim
edencardim em gmail.com
Quinta Novembro 6 08:57:32 PST 2008
2008/11/6 Solli Honorio <shonorio em gmail.com>:
> Eden, o 'use base' não resolve o problema ?
Bom, levando ao pé da letra, não. Ele disse que quer adicionar um
método ao objeto, e 'use base' vai adicionar à classe. Em JavaScript
você faria:
foo = new Object;
foo.meth = function () { alert('foo') };
foo.meth()
bar = new Object;
bar.meth = function () { alert('bar') }
bar.meth()
Por esse motivo, JavaScript é realmente orientado a objetos, a maioria
das outras linguagens que alegam ser orientadas a objetos na verdade
são orientadas a classes, inclusive Java e Python. Perl também é
orientado a classes, mas como sempre, dá pra hackear algo parecido :).
use warnings;
use strict;
package Object;
use Carp;
sub new {
return bless {}, shift;
}
sub AUTOLOAD {
my($self) = @_;
our $AUTOLOAD;
my $meth = (split /::/, $AUTOLOAD)[-1];
my $code = $self->{$meth};
if(ref $code eq 'CODE') {
goto &$code;
}
croak "couldn't find $meth via package ${\ref $self}";
}
package main;
$\ = $/;
my $foo = Object->new;
$foo->{method} = sub { print 'Oi, eu sou um método que só existe em $foo' };
my $bar = Object->new;
$bar->{method} = sub { print 'Oi, eu sou um método que só existe em $bar' };
for($foo, $bar) {
$_->method;
}
$foo->some_other_method;
Se você usar herança, o mesmo método em dois objetos diferentes da
mesma classe vai invocar o mesmo código.
ALERTA: não use isso a não ser que você saiba *BEM* o que está fazendo :)
> Pedro eu não entendi bem o teu problema, mas se for relacionado a herança,
> você pode encontrar informações no 'perldoc perlboot'.
É, eu também não entendi muito bem porque ele quer fazer isso,
provavelmente ele quer Module::Pluggable como o Frederico falou.
--
Eden Cardim Need help with your Catalyst or DBIx::Class project?
Code Monkey http://www.shadowcat.co.uk/catalyst/
Shadowcat Systems Ltd. Want a managed development or deployment platform?
http://edenc.vox.com/ http://www.shadowcat.co.uk/servers/
Mais detalhes sobre a lista de discussão Rio-pm