我一直在學Perl,並發現它與我所知的其他OOP語言有很大的不同。 我試着翻譯肚裏像一個C#代碼:Perl中有沒有類似於C#中的GetType()的函數?
class Car{}, class CarList{}, class Program{}
和方法(僞):
if (var.GetType() == Car)
{
}
else if (var.GetType == CarList)
{
}
我怎麼寫在perl沒有的GetType功能還是有一個?
我一直在學Perl,並發現它與我所知的其他OOP語言有很大的不同。 我試着翻譯肚裏像一個C#代碼:Perl中有沒有類似於C#中的GetType()的函數?
class Car{}, class CarList{}, class Program{}
和方法(僞):
if (var.GetType() == Car)
{
}
else if (var.GetType == CarList)
{
}
我怎麼寫在perl沒有的GetType功能還是有一個?
ref應該是你需要的。
在許多Perl代碼中,如果您想要查找對象類的確切名稱,則可以使用ref
運算符。由於如果該值不是引用,因此它是未定義的,所以您需要在使用字符串比較之前檢查該值。
if(ref $var) {
if(ref($var) eq 'Car') {
# ...
} elsif(ref($var) eq 'CarList') {
# ...
}
}
這很可能是你想要的東西像C#的is
運算符。這將是UNIVERSAL
的isa
方法,它由所有對象繼承。在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")) {
...
}
不錯! `更接近GetType。 – hometoast 2011-01-18 21:06:13
語言,做的事情不管這種方式,而不是多態性是壞OOP。 – aschepler 2011-01-18 21:01:08