Perl 方法和引用传递
Perl method and pass by reference
对我来说,Perl 引用是一件很难掌握的事情。在阅读一些使用对象方法的类似 OO 的脚本时,我从未见过将对象用作引用。即使对于大对象,将其用作参考而不是复制到子例程(方法)也会受益。
PerlMaven 表示:
$p->a_method($value);
Behind the scenes, perl will run
a_method($p, $value);
但是如果 $p
是一个巨大的对象,你不想将它作为参考传递吗?
a_method($p, $value)
我一直明白,如果对象很大,通过引用传递可以显着提高速度。在 OO 中,您很可能正在处理大型对象(例如巨大的 XML::Twig
)。那么,当实际将其作为对子例程的引用传递时,您将如何调用此类对象的方法?
$p
已经包含对该对象的引用。方法调用需要对对象的引用,而传递给子对象的正是这个引用。所以,$self 始终是一个参考。参见 perlobj and bless。
#! /usr/bin/perl
use strict;
use warnings;
use feature 'say';
{ package Class;
sub new { bless {}, __PACKAGE__ }
sub inf { ref shift }
}
my $o = 'Class'->new;
say $o->inf ? 'reference' : 'not a reference';
输出:
reference
对我来说,Perl 引用是一件很难掌握的事情。在阅读一些使用对象方法的类似 OO 的脚本时,我从未见过将对象用作引用。即使对于大对象,将其用作参考而不是复制到子例程(方法)也会受益。
PerlMaven 表示:
$p->a_method($value);
Behind the scenes, perl will run
a_method($p, $value);
但是如果 $p
是一个巨大的对象,你不想将它作为参考传递吗?
a_method($p, $value)
我一直明白,如果对象很大,通过引用传递可以显着提高速度。在 OO 中,您很可能正在处理大型对象(例如巨大的 XML::Twig
)。那么,当实际将其作为对子例程的引用传递时,您将如何调用此类对象的方法?
$p
已经包含对该对象的引用。方法调用需要对对象的引用,而传递给子对象的正是这个引用。所以,$self 始终是一个参考。参见 perlobj and bless。
#! /usr/bin/perl
use strict;
use warnings;
use feature 'say';
{ package Class;
sub new { bless {}, __PACKAGE__ }
sub inf { ref shift }
}
my $o = 'Class'->new;
say $o->inf ? 'reference' : 'not a reference';
输出:
reference