我一直在学习Perl,发现它与我所知道的其他OOP语言非常不同。 我试图翻译一个C#代码,如:
class Car{}, class CarList{}, class Program{}
和方法(伪代码):
if (var.GetType() == Car)
{
}
else if (var.GetType == CarList)
{
}
如何在没有GetType函数的情况下在perl中编写它,或者是否有一个?
答案 0 :(得分:11)
在很多Perl代码中,如果您正在寻找对象类的确切名称,那么ref
运算符就是您想要的。由于如果值不是引用,它是未定义的,您需要在使用字符串比较之前检查该值。
if(ref $var) {
if(ref($var) eq 'Car') {
# ...
} elsif(ref($var) eq 'CarList') {
# ...
}
}
你更有可能想要像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") ) {
...
}
答案 1 :(得分:3)
ref应该是您所需要的。