Perl中的实例方法应该像这样互相调用:
package BlaBla;
sub foo {
my($self) = @_;
#do something awesome;
}
sub bar {
my($self) = @_;
foo();
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
package BlaBla;
sub foo {
my($self) = @_;
#do something awesome
}
sub bar {
my($self) = @_;
$self->foo();
}
Run Code Online (Sandbox Code Playgroud)
谢谢大家的时间.
Dav*_*man 15
是的,您应该包括$self
- 如果不这样做,多态将不起作用,因为每个方法将在其自己的包中查找所有调用,即使它们在子类中被重写.更糟糕的是,如果引用的方法是从父级继承而未在当前子类中重写,则程序将die
因为它不存在于该包中.即使你确实记得试图通过传递$self
第一个参数来伪造Perl的OO机制.
如果foo()是一个可以从其他地方调用的方法,你当然应该总是把它称为方法,否则从你继承的类将无法覆盖它,你将强制你的foo()检查是否它是以方式方式或以功能方式调用的.
另一方面,如果foo()只是你的一些方法使用的一些帮助代码,并且非常特定于你的类的实现,那么你可以直接调用它,但是应该真的总是直接调用它,并且可能希望将其标记为类可用的私有函数,方法是在其名称前加下划线:_foo().
假设你$self
在某处使用,第一个将无法工作,foo()
因为它没有传递任何参数.你可以调用foo($self)
,但你几乎肯定会更好地使用实际的方法调用语法,而不是将Perl的OO功能抛出窗口,只是将其foo()
视为一个恰好调用其第一个参数" $self
" 的函数.