是否为集合记录了乘法运算符?

时间:2016-08-04 20:40:08

标签: delphi set

我今天注意到了这段代码,并想知道这些类型的操作是否记录在某处以及为什么这样做(性能等)。

var
  Shift: TShiftState
begin
  if [ssShift, ssCtrl] * Shift <> [] then
  begin
    ...
  end;
end;

我从测试中看到它,只是查看这样的代码,检查Shift是否包含ssShiftssCtrl。这是记录在案的行为,还是只是利用集合实际上在内部存储为整数的事实?

1 个答案:

答案 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