相关疑难解决方法(0)

寻求Perl习语来检查$ self是一个类还是一个对象

在Perl中,我被一些看起来像下面的bug的东西咬了一口:

package Foo;
sub method {
    my $self = shift;
    my @args = @_;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我把它称为子程序,而不是方法:

Foo::method( "arg1", "arg2" );
Run Code Online (Sandbox Code Playgroud)

而不是将其称为方法 - 在这种情况下,它是一个"类方法":

Foo->method( "arg1", "arg2" );
Run Code Online (Sandbox Code Playgroud)

调用Foo :: method("arg1","arg2")导致"arg1"被删除.

使用"对象方法"可能会出现类似的注意事项:

my $object = Foo->new();
$obj->method( "arg1", "arg2" );
Run Code Online (Sandbox Code Playgroud)

是否有一个友好,简洁的Perl习惯用于检查传统上调用的第一个参数$self实际上是类(包)和/或类/包名称中的对象?

我想出的最好的是:

package Foo;
sub method {
    my $self = ($_[0]->isa(__PACKAGE__) ? shift @_ : die "...error message...";
    my @args = @_;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这并不简单

package Foo;
sub method {
    my $self = shift;
    die "...error message..."  if …
Run Code Online (Sandbox Code Playgroud)

oop perl

7
推荐指数
1
解决办法
334
查看次数

标签 统计

oop ×1

perl ×1