Perl中的任何函数是否与C#中的GetType()类似?

Per*_*bie 5 perl

我现在已经学习了一点Perl,发现它与我所知道的其他OOP语言有很大的不同.我试图翻译一个C#代码,如下所示:

class Car{}, class CarList{}, class Program{}
Run Code Online (Sandbox Code Playgroud)

和方法(伪代码):

if (var.GetType() == Car)
{
}
else if (var.GetType == CarList) 
{
}
Run Code Online (Sandbox Code Playgroud)

如何在没有GetType函数的情况下在perl中编写它或者是否存在?

psm*_*may 11

在很多Perl代码中,ref如果您正在寻找对象类的确切名称,那么运算符就是您想要的.由于如果值不是引用,它是未定义的,您需要在使用字符串比较之前检查该值.

if(ref $var) {
    if(ref($var) eq 'Car') {
        # ...
    } elsif(ref($var) eq 'CarList') {
        # ...
    }
}
Run Code Online (Sandbox Code Playgroud)

你更希望得到类似C#的is运算符.这将是所有对象继承的isa方法UNIVERSAL.http://perldoc.perl.org/UNIVERSAL.html上的文档示例:

use Scalar::Util 'blessed';

# Tests first whether $obj is a class instance and second whether it is an
# instance of a subclass of Some::Class
if ( blessed($obj) && $obj->isa("Some::Class") ) {
    ...
}
Run Code Online (Sandbox Code Playgroud)


hom*_*ast 3

ref应该是你需要的。