2011-01-18 76 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

相關問題