在我的方法中使用__PACKAGE__对继承不利吗?

Geo*_*Geo 6 oop perl

如果在我的代码中,我会有如下调用:

__PACKAGE__->method;
Run Code Online (Sandbox Code Playgroud)

如果继承此模块,这会限制此模块的可用性吗?

Sin*_*nür 9

这取决于你想做什么:

#!/usr/bin/perl

package A;

use strict; use warnings;

sub new { bless {} => $_[0] }

sub method1 {
    printf "Hello from: %s\n", __PACKAGE__;
}

sub method2 {
    my $self = shift;
    printf "Hello from: %s\n", ref($self);
}

package B;

use strict; use warnings;
use parent 'A';

package main;

my $b = B->new;

$b->method1;
$b->method2;
Run Code Online (Sandbox Code Playgroud)

输出:

Hello from: A
Hello from: B


bri*_*foy 6

如果您打算继承该方法,请在指示对象上调用它,并且不要依赖于您找到它的包.如果您打算调用包内部的方法,而其他包不应该看到,那么它可能会好好地.在Intermediate Perl中有一个更全面的解释,可能在perlboot中(这是本书的摘录).

一般来说,__PACKAGE__除非我正在写一个modulino,否则我尽量不要使用.

你为什么要用__PACKAGE__

  • 好的,但你为什么试图获得包名?无论你如何得名,你都可能不应该这样做. (6认同)

Pet*_*and 3

那要看。有时__PACKAGE__->method()正是您所需要的。

否则最好使用ref($self)->class_method()or $self->method()