Verwendung von 'ungleich' mit logischem OderIn einem (n Wenn Aussage, die ich machen möchte Wenn meinParameter ist nicht gleich zu entweder Parameter1 oder Parameter2 dann etwas zurückgeben.Aber meine folgende Funktion funktioniert nicht wie erwartet.,. Wo gehe ich falsch
Names Default To Here(1);
myFunc = function ({myParameter}, {default local},
If (myParameter != Or("Parameter1","Parameter2"),
return(Eval Insert("output some msg")),
);
);
clear log ();
//output = myFunc ("Parameter1");<BR />output = myFunc ("notParameter1");<BR />
SkripterstellungBetreff: Verwendung von 'ungleich' mit logischem OderHallo @Neo ,
Ich denke, das Problem könnte darin liegen, wie Sie den logischen Operator "oder" aufrufen. In JSL ist das logische Oder dieses Zeichen | . Sie würden also die If()-Anweisung in etwas wie das Folgende ändern, es sollte funktionieren:
Names Default To Here( 1 );
MyFunc = Function( {Myparam},
If(
(Myparam != parm1 | Myparam != parm2), Return( Eval Insert( "Output some msg" ) )
)
);Denken Sie daran, dass für die Logik nur eine dieser beiden wahr sein muss und das Ergebnis zurückgegeben wird. Wenn Myparam einem davon entspricht, wird die Nachricht trotzdem zurückgegeben.
Hoffe das hilft!,
DS
Betreff: Verwendung von 'ungleich' mit logischem OderWenn Sie Or verwenden möchten, wird der Vergleich sehr lang und mühsam zu pflegen, wenn die Liste der zulässigen Parameter zunimmt. Also würde ich ! Contains und eine Liste der zulässigen Parameter (oder assoziatives Array) verwenden:
Names Default To Here(1);
myFunc = Function({myParameter},
{default local},
ok_parameters = {"Parameter1", "Parameter2"};
If(!Contains(ok_parameters, myParameter),
Return(Eval Insert("^myParameter^ not in list ^ok_parameters^"));
,
Return(Eval Insert("^myParameter^ in list ^ok_parameters^"));
);
);
output = myFunc("Parameter1");
Show(output);
output = myFunc("notParameter1");
Show(output);
Sie können aber auch oder/und verwenden, unten ist ein Beispiel (| bedeutet oder):
Names Default To Here(1);
myFunc = Function({myParameter},
{default local},
If(!(myParameter == "Parameter1" | myParameter == "Parameter2"),
return(Eval Insert("output some msg"));
);
);
output = myFunc("Parameter1");
show(output);
output = myFunc ("notParameter1");
show(output);Betreff: Verwendung von 'ungleich' mit logischem OderDu meinst wahrscheinlich das (was mir am besten gefällt)
if ( (myParameter != Parameter1) & (myParameter != Parameter2) , ...
das ist das gleiche
if( ! ( (myParameter == Parameter1) | (myParameter == Parameter2) ), ...
oder, so wie Sie die or()-Funktion verwendet haben, genauso wie hier
if( !or(myParameter==Parameter1, myParameter==Parameter2), ...
https://en.wikipedia.org/wiki/De_Morgan%27s_laws
Wenn es fehlende Werte gibt, stellen Sie sicher, dass Sie sie mit isMissing() behandeln, da sie nicht so verglichen werden, wie Sie vielleicht erwarten.