2016-08-04 4 views
5

今日、このコードブロックに気付き、このような操作がどこかに文書化されているのか、それがなぜこのように(パフォーマンスなど)行われたのか不思議に思っていました。乗算演算子はセットについて文書化されていますか?

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

それは私のテストから私に見て、ちょうどシフトがssShiftまたはssCtrlのいずれかが含まれているかどうかをチェックされ、このようなコードを見て。これは文書化された振る舞いですか、それともセットが実際に内部的に整数として格納されているという事実を利用しているだけですか?

+0

内部整数表現は、すべて単独で与えられた計算を可能にするのに十分ではないであろう。 –

答えて

11

これは、セットで使用したときの乗算演算子ではありません。それは交差演算子です。これは文書化されており、デルファイ前の日からされています。 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 
+0

ありがとう、それは私が探していたものです。私は表現を見ることは決して考えなかった。私はhttp://docwiki.embarcadero.com/RADStudio/Berlin/en/Structured_Types_(Delphi)の下にある定義を見ていました。そして、私は実際にこれが古いTurbo Pascalの時代から言語に取り組んでいることを知っているはずです:) – Graymatter

+0

そのドキュメントの一番下にあるリンクに従ってください...... –

+1

docwikiでセット演算子を検索すると、 。 –

関連する問題