我开始学习pascal,而在我的生活中找不到一个能够返回其输入类型的简单函数。
如果你们中的任何人都认识Python,那么我正在寻找的功能相当于type(object)
。
感谢您的帮助,我真的很惊讶这一点并不容易找到。
答案 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.
进行验证后稍后动态投射到正确的班级类型。