2011-01-18 96 views
5

我一直在学Perl,并发现它与我所知的其他OOP语言有很大的不同。 我试着翻译肚里像一个C#代码:Perl中有没有类似于C#中的GetType()的函数?

class Car{}, class CarList{}, class Program{} 

和方法(伪):

if (var.GetType() == Car) 
{ 
} 
else if (var.GetType == CarList) 
{ 
} 

我怎么写在perl没有的GetType功能还是有一个?

+8

语言,做的事情不管这种方式,而不是多态性是坏OOP。 – aschepler 2011-01-18 21:01:08

回答

11

在许多Perl代码中,如果您想要查找对象类的确切名称,则可以使用ref运算符。由于如果该值不是引用,因此它是未定义的,所以您需要在使用字符串比较之前检查该值。

if(ref $var) { 
    if(ref($var) eq 'Car') { 
     # ... 
    } elsif(ref($var) eq 'CarList') { 
     # ... 
    } 
} 

这很可能是你想要的东西像C#的is运算符。这将是UNIVERSALisa方法,它由所有对象继承。在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")) { 
    ... 
} 
+0

不错! `更接近GetType。 – hometoast 2011-01-18 21:06:13

相关问题