Come usare usa 'non uguale a' con logico oIn un Se dichiarazione che vorrei fare Se mioParametro non è uguale a Parameter1 o Parameter2 quindi restituire qualcosa.Ma la mia funzione seguente non funziona come previsto.,. Dove sto sbagliando
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");
SceneggiaturaRe: Come usare usa 'non uguale a' con logico oProbabilmente intendi questo (che mi piace di più)
if ( (myParameter != Parameter1) & (myParameter != Parameter2) , ...
che è lo stesso di questo
if( ! ( (myParameter == Parameter1) | (myParameter == Parameter2) ), ...
o, il modo in cui stavi usando la funzione or(), lo stesso di questo
if( !or(myParameter==Parameter1, myParameter==Parameter2), ...
https://en.wikipedia.org/wiki/De_Morgan%27s_laws
Inoltre, se ci sono valori mancanti, assicurati di gestirli con isMissing() perché non si confrontano come potresti aspettarti.
Re: Come usare usa 'non uguale a' con logico oSe si desidera utilizzare Or il confronto diventerà molto lungo e fastidioso da mantenere se l'elenco dei parametri consentiti aumenta. Quindi userei !Contains e l'elenco dei parametri consentiti (o array associativo):
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);
Ma puoi usare o/e anche, di seguito è riportato un esempio (| significa o):
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);Re: Come usare usa 'non uguale a' con logico oCiao @Neo ,
Penso che il problema potrebbe essere nel modo in cui chiami l'operatore logico "o". In JSL, il logico o è questo carattere | . Quindi, cambieresti l'istruzione If() in qualcosa di simile al seguente, dovrebbe funzionare:
Names Default To Here( 1 );
MyFunc = Function( {Myparam},
If(
(Myparam != parm1 | Myparam != parm2), Return( Eval Insert( "Output some msg" ) )
)
);Tieni presente che la logica richiede solo uno di questi due per essere vero e restituirà il risultato. Se Myparam è uguale a uno di questi, restituirà comunque il messaggio.
Spero questo sia di aiuto!,
ds