2016-08-04 41 views
5

Ich habe heute diesen Block Code bemerkt und habe mich gefragt, ob diese Art von Operationen irgendwo dokumentiert sind und warum es so gemacht wurde (Performance, etc).Ist der Multiplikationsoperator für Mengen dokumentiert?

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

Es sieht für mich aus meinen Tests und auf der Suche nur auf den Code wie diese Überprüfung wird, wenn die Umschalttaste entweder ssShift oder ssCtrl enthält. Ist dieses dokumentierte Verhalten oder nutzt es nur die Tatsache, dass die Menge tatsächlich intern als ganze Zahl gespeichert wird?

+0

Eine interne Integer-Darstellung würde nicht ausreichen, um die gegebene Berechnung von selbst alle zu ermöglichen. –

Antwort

11

Das ist nicht der Multiplikationsoperator bei der Verwendung mit Sets; es ist der Kreuzungsoperator. Dies ist dokumentiert und seit Tagen vor Delphi. Siehe Expressions, insbesondere den Abschnitt zu den Einstellungen. Sie sind die mathematischen Standardoperatoren für Vereinigungs-, Schnittmengen-, Unter- und Supermengen, Gleichheit, Ungleichheit und Zugehörigkeit.

Hier ist eine Zusammenfassung der Tabelle, aus der Dokumentation:

 
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

Danke, genau das habe ich gesucht. Ich habe nie daran gedacht, die Ausdrücke zu betrachten. Ich habe mir die Set-Definitionen unter http://docwiki.embarcadero.com/RADStudio/Berlin/en/Structured_Types_(Delphi) angeschaut. Und ich sollte wirklich wissen, dass ich seit den alten Turbo Pascal Tagen an der Sprache arbeite :) – Graymatter

+0

Folgen Sie dem Link am Ende dieser Dokumentation ...... –

+1

Suchen Sie im Docwiki nach Set-Operatoren, erhalten Sie diese Seite als erster Treffer . –