我今天注意到了这段代码,并想知道这些类型的操作是否记录在某处以及为什么这样做(性能等)。
var
Shift: TShiftState
begin
if [ssShift, ssCtrl] * Shift <> [] then
begin
...
end;
end;
我从测试中看到它,只是查看这样的代码,检查Shift是否包含ssShift
或ssCtrl
。这是记录在案的行为,还是只是利用集合实际上在内部存储为整数的事实?
答案 0 :(得分:13)
当与集合一起使用时,这不是乘法运算符;它是交叉点运算符。这是记录在案的,并且自德尔福之前就开始了。请参阅Expressions,特别是有关设置操作的部分。它们是联合,交集,子集和超集,平等,不平等和成员资格的标准数学运算符。
以下是文档表格的摘要:
Operator Operation Operand Types Result Type Example -------- --------- ------------- ----------- ------- + union set set Set1 + Set2 - difference set set S - T * intersection set set S * T <= subset set Boolean Q <= MySet >= superset set Boolean S1 >= S2 = equality set Boolean S2 = MySet <> inequality set Boolean MySet <> S1 in membership ordinal, set Boolean A in Set1