内置函数,返回其输入的类型

时间:2016-01-31 06:18:49

标签: pascal

我开始学习pascal,而在我的生活中找不到一个能够返回其输入类型的简单函数。

如果你们中的任何人都认识Python,那么我正在寻找的功能相当于type(object)

感谢您的帮助,我真的很惊讶这一点并不容易找到。

2 个答案:

答案 0 :(得分:0)

你无法从这里到达那里。帕斯卡没有内省。

函数接受一个类型,或者它不能猜出它的参数类型。 pascal类型在编译时是固定的,因此不需要能够识别对象的函数。

答案 1 :(得分:0)

正如之前的回答中所述,Object Pascal是静态类型的,因此您不需要这样做。但是对于对象(类),您具有与def parse(self, response): print("hello"); hxs = HtmlXPathSelector(response) sites = hxs.select('//div[@id="pagination_contents"]') items = [] i=3 for site in sites: item = DmozItem() item['link'] = site.select('div[2]/div['+str(i)+']/a/@href').extract() i=int(i)+1; print i items.append(item) return items 运算符相同的isinstance()

is

在某些情况下(如此处),您只知道实例是TObject(所有类的共同祖先)。因此,您可以在使用program isop; type TFoo = class(TObject) end; TBar = class(TObject) end; TBaz = class(TBar) end; var Obj1, Obj2, Obj3: TObject; Baz: TBaz; begin Obj1 := TFoo.Create; Obj2 := TBar.Create; Obj3 := TBaz.Create; writeln(Obj1 is TFoo); writeln(Obj1 is TBar); writeln(Obj1 is TBaz); writeln(Obj2 is TFoo); writeln(Obj2 is TBar); writeln(Obj2 is TBaz); writeln(Obj3 is TFoo); writeln(Obj3 is TBar); writeln(Obj3 is TBaz); if Obj1 is TBaz then // false Baz := TBaz(Obj1); // or if Obj3 is TBaz then // true Baz := Obj3 as TBaz; end. 进行验证后稍后动态投射到正确的班级类型。