次のような場合に入力する方法があります:
var = (cond) ? true : false;
または、この形式を使用する必要がありますか?
if (cond)
true
else
false
end
MatLabには、三項演算子や、1行のifステートメント用のその他の構文糖衣がありません。ただし、ifステートメントが非常に単純な場合は、とにかく1行で記述することができます。
if (cond); casetrue(); else; casefalse(); end
三項演算子ほど単純ではありませんが、5行のコードで記述するよりも優れています。
Trueまたはfalseのみが必要な場合は、MatlabSorter
が提案することを実行できます。実際の三次演算子(つまり、a = b ? c : d
)、MATLABにはありません。ただし、提供されているファイル here を使用すると、親しくなります。
できるよ
var = 5 > 4;
varをtrueに設定します。必要なものを5> 4に置き換えてください。
うーん...誰もこれに言及していません
fi = @(varargin)varargin{end-varargin{1}}
ドキュメントのどこかに「終わり」が来ると書かれているので、これはより将来の証拠になります
fi = @(varargin)varargin{length(varargin)-varargin{1}}
使用法 :
fi(input('Do you like Matlab ? '),'yes','no')
>> no
インラインケースが必要な場合は、 Mathworks ...
MATLABには条件式はありませんが、状況によっては、たとえばvar = cond*true_expr + (1-cond)*false_expr
と言うことで同様の効果を得ることができます。 Cの条件式とは異なり、これはもちろん両方のtrue_expr
およびfalse_expr
、およびcond
が0または1でない場合(注:false
は0のように動作し、true
は1のように動作します)、おかしな結果が得られます。
交換
c = (x ? a : b)
沿って
c = subsref({b; a}, substruct('{}', {x + 1}))
xはブール値または1または0でなければなりません。
trueまたは1が選択されます
falseまたは0はbを選択します
これは、セルに含めることができるすべてのもので動作するはずであり、複雑なフォーミュラでも使用できます!
私はこのスタイルを頻繁に使用します:
cond = what < ever;
n = getfield([23,42], {1+(what < ever)}) % for any 1x1-data
s = cell2mat(getfield({'no','yes'}, {1+(what < ever)})) % for nonuniform
ヘルパー関数を必要としないほどコンパクトです