我一直在学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