Perl - 是类的对象实例?

时间:2017-07-28 14:32:37

标签: perl

有没有办法检查一个对象是否是一个类的实例?如果一个对象是一个类的实例,如果它已被类祝福:

package Example;

sub new {
    $self = {};
    bless($self, shift);
    return $self;
}

############

use Example;
$exp = Example->new(); # $exp is now an 'instance' of Example
# something like instanceof($exp, Example) would return 1

1 个答案:

答案 0 :(得分:5)

Scalar::Util中的blessed()子例程返回对象所属类的名称。

say blessed $exp; # prints "Example"

对于您的测试,您可以使用以下内容:

if (blessed $exp eq 'Example') { ...}

如果子类化可能是个问题,那么请改用isa()

if ($exp->isa('Example')} { ... }

但如果$exp不是对象,则会引发错误,因此请先调用blessed()来保护呼叫。

if (blessed($exp) and $exp->isa('Example')) { ... }

isa()UNIVERSAL类的一个方法,每个类都是UNIVERSAL的子类,因此每个对象都有isa()方法。