在面向对象编程方面感觉不够熟练,我试图通过阅读《现代Perl》这本书来提高自己。关于所问的话题,在这本书中我发现了以下示例:
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();
我希望你能给我提供一些关于it技术的有效代码。我以为我已经理解了闭包和AUTOLOAD的工作原理,但是现在我卡住了。
Log::method_call
让我感到很困惑,现在我明白它只是一个真实日志方法的占位符。我曾经认为它会递归调用 AUTOLOAD,但我没有看到任何理由。谢谢,现在对我来说清晰多了! - w.k