当实例方法通过"$ self"引用相互调用时,在Perl中这是一个很好的做法吗?

Ale*_*ird 5 oop perl

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机制.


Ale*_*lex 9

如果foo()是一个可以从其他地方调用的方法,你当然应该总是把它称为方法,否则从你继承的类将无法覆盖它,你将强制你的foo()检查是否它是以方式方式或以功能方式调用的.

另一方面,如果foo()只是你的一些方法使用的一些帮助代码,并且非常特定于你的类的实现,那么你可以直接调用它,但是应该真的总是直接调用它,并且可能希望将其标记为类可用的私有函数,方法是在其名称前加下划线:_foo().


Woo*_*ble 8

假设你$self在某处使用,第一个将无法工作,foo()因为它没有传递任何参数.你可以调用foo($self),但你几乎肯定会更好地使用实际的方法调用语法,而不是将Perl的OO功能抛出窗口,只是将其foo()视为一个恰好调用其第一个参数" $self" 的函数.