Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Multiplikation mit Sets


Nersgatt - Di 16.09.14 10:48
Titel: Multiplikation mit Sets
Moin,

beim lesen des Quelltextes von TDataSet bin ich auf folgenden Schnippsel gestoßen:

Delphi-Quelltext
1:
2:
3:
4:
  if Active then
    if ([csUpdating, csDesigning] * ComponentState) <> [] then
      Close else
      DatabaseError(SDataSetOpen, Self);


Kann mir jemand die markierte Zeile erklären? Ich denke, da wird geprüft, ob ComponentState csUpdating oder csDesigning ist. Aber warum mit dieser Multiplikation? Was passiert da intern?

Danke!


Gammatester - Di 16.09.14 11:00

Für Sets bedeutet * den Mengendurchschnitt (engl intersection), d.h. die Menge der Elemente die in beiden Mengen des Durchschnitts vorhanden sind.

Wenn csUpdating keine csDesigning Menge sondern Elemente sind, kann man Deine Bedingung auch als

(csUpdating in ComponentState) or (csDesigning in ComponentState)

schreiben.


jasocul - Di 16.09.14 11:03

Es geht dabei um den Operator zur Bildung der Schnittmenge, wie user profile iconGammatester schon geschrieben hat.
Hier mal ein Link zu einer Übersicht [http://de.wikibooks.org/wiki/Programmierkurs:_Delphi:_Pascal:_Operatoren#Mengenoperatoren].


WasWeißDennIch - Di 16.09.14 11:03

Siehe auch http://docwiki.embarcadero.com/RADStudio/XE3/de/Ausdr%C3%BCcke_%28Delphi%29#Mengenoperatoren


Nersgatt - Di 16.09.14 11:07

Danke. Man lernt doch immer noch dazu. :D