现代Perl:如何在AUTOLOAD()中实现Redispatching方法?
发布时间:2020-12-15 23:26:39 所属栏目:大数据 来源:网络整理
导读:在OO主题中感觉很弱我试着用 Modern Perl book进行改进.关于我在以下示例中找到的问题: package Proxy::Log; sub new{ my ($class,$proxied) = @_; bless $class,$proxied;}sub AUTOLOAD{ my ($name) = our $AUTOLOAD =~ /::(w+)$/; Log::method_call( $n
在OO主题中感觉很弱我试着用
Modern Perl book进行改进.关于我在以下示例中找到的问题:
package Proxy::Log; sub new { my ($class,$proxied) = @_; bless $class,$proxied; } sub AUTOLOAD { my ($name) = our $AUTOLOAD =~ /::(w+)$/; Log::method_call( $name,@_ ); my $self = shift; return $$self->$name( @_ ); } 这段代码只是一个划痕或工作示例吗? 我不明白,我怎么能用它,它应该记录在哪里和什么,以及我应该如何创建一个对象(什么应该到$proxied)? 我添加了几行来测试它,但没有得到AUTOLOAD功能: package main; my $tst = Proxy::Log->new(); say $tst->AnyKindOfSub(); 我希望你能引导我使用它的一些工作代码.我知道我的想法,关闭和AUTOLOAD如何工作,但我在这里有点卡住. 解决方法
我认为这个例子已经在新的Proxy :: Log中切换了bless参数.它可能应该是:
bless $proxied,$class; 在下面找到一个功能性示例,因为它可能是预期的.代理类写入日志,然后重新调度对目标对象的调用(下面的示例中的另一个类). package Proxy::Log; sub new { my ($class,$proxied) = @_; bless $proxied,$class; } sub AUTOLOAD { my ($name) = our $AUTOLOAD =~ /::(w+)$/; warn "$name: @_"; my $self = shift; return $$self->$name( @_ ); } package Another; sub new { bless {},$_[0]; } sub AnyKindOfSub { warn "Target calledn"; return "Hello"; }; package main; my $tst = Proxy::Log->new(Another->new); say $tst->AnyKindOfSub(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |