Da and
kommutativ ist, können Sie ohne Klammern tun:
if a and b and a != "aaa" and b != "bbb"
ALTERNATIVE
Initialisieren Sie Variablen auf den Wert Sie testen (aaa), so dass, wenn Ihr Implementierungscode hat sie nicht ändern, werden Sie das gewünschte Ergebnis erhalten:
a=aaa
b=bbb
... do some stuff ...
global a,b
if a != "aaa" and b != "bbb"
MsgBox, Yes
ERKLÄRUNG
Wenn a
ist undefined
, scheint es, wie Sie wollen undefined != "aaa"
false
irgendwie zu bewerten. Das ist das gleiche wie zu sagen Sie wollen undefined == "aaa"
irgendwie zu true
auswerten. Deine Logik ist dafür zu komplex.
Hier ist eine Zustandstabelle für Ihre Logik:
Actual Desired T1 T2
a b MsgBox MsgBox a!=aaa b!=bbb T1 and T2
----- ------ ------ ------- ------ ------ -----
undef undef Yes no true true true
undef bbb no no true false false
undef 222 Yes no true true true The example you didn't want
aaa undef no no false true false
aaa bbb no no false false false
aaa 222 no no false true false
111 undef Yes no true true true
111 bbb no no true false false
111 222 Yes Yes true true true Only one you want
Die Actual MsgBox
Spalte zeigt an, wenn das Meldungsfeld in Ihrem ursprünglichen Code erscheint. Desired MsgBox
= Ja, was du wolltest. T1
und T2
sind die Teilberechnungen Ihres Zustandes. T1 and T2
ist der Endwert Ihrer Erkrankung.
Die letzte Zeile zeigt den einzigen Status, in dem die MsgBox angezeigt werden soll; wenn a
gleich null ist aaa
noch undefined
UND b
ist weder gleich bbb
noch undefined
.
So können wir die Logik vereinfachen, indem wir a
zu "aaa" und b
zu "bbb" initialisieren. In der Tat kombinieren wir Ihre beiden Bedingungen für jede Variable in einer einzigen Bedingung, indem Sie die beiden Werte ("aaa" und undefined
) gleichwertig machen.
Ich hoffe, dass macht Sinn
Danke für die Antwort, aber meine Frage war, wie man eine Nachricht vermeiden, wenn eine der Variablen nicht definiert ist. Wenn Sie in Ihrem Beispiel die erste Zeile auskommentieren ('; a = aaa'), wird die Nachricht weiterhin angezeigt. Das ist nicht was ich will. ** Update: ** Oh, tut mir leid, deine eigentliche Antwort war 'wenn a und b und a! =" Aaa "und b! =" Bbb "', und der zweite Codeblock ist nur ein Zusatz, oder? –
der zweite Codeblock war eine alternative Lösung. Ich fügte eine Erklärung hinzu –