opérateur ternaire à matlab
y a-t-il une façon de taper si comme:
var = (cond) ? true : false;
ou devons-nous utiliser ce format?
if (cond)
true
else
false
end
6 réponses
MatLab n'a pas d'opérateur ternaire, ou n'importe quel autre sucre syntaxique pour les instructions if-line. Mais si votre if-statement est vraiment simple, vous pouvez juste l'écrire dans une ligne de toute façon:
if (cond); casetrue(); else; casefalse(); end
ce n'est pas aussi simple que l'opérateur ternaire, mais c'est encore mieux que de l'écrire en 5 lignes de code.
si vous avez seulement besoin de true ou false, vous pouvez faire ce que MatlabSorter
suggère. Dans le cas où vous voulez un opérateur tertiaire réel (i.e. a = b ? c : d
), il n'y en a pas à MATLAB. Cependant, en utilisant le fichier fourni ici, vous pouvez obtenir près.
Vous pouvez faire
var = 5 > 4;
qui va mettre var à true. Il suffit de substituer ce dont vous avez besoin pour 5 > 4.
MATLAB n'a pas d'expressions conditionnelles, mais dans certaines situations vous pouvez obtenir un effet similaire en disant, par exemple,var = cond*true_expr + (1-cond)*false_expr
. Contrairement à L'expression conditionnelle de C, celle-ci évaluera bien sûr toujours les deux true_expr
et false_expr
et si cond
n'est pas 0 ou 1 (note:false
se comporte comme 0; true
se comporte comme 1) vous obtiendrez des résultats fous.
Hmm... personne n'a mentionné cette
fi = @(varargin)varargin{end-varargin{1}}
quelque part dans la doc il est écrit la " fin " est venue à l'un ce sera donc plus d'avenir
fi = @(varargin)varargin{length(varargin)-varargin{1}}
Utilisation :
fi(input('Do you like Matlab ? '),'yes','no')
>> no
Si votre besoin d'inline cas, voir Mathworks ...
j'utilise ce style souvent:
cond = what < ever;
n = getfield([23,42], {1+(what < ever)}) % for any 1x1-data
s = cell2mat(getfield({'no','yes'}, {1+(what < ever)})) % for nonuniform
il est assez compact pour ne pas nécessiter une fonction d'aide