Gün*_*göz 28 matlab if-statement ternary-operator conditional-operator
有没有办法输入如果喜欢:
var = (cond) ? true : false;
Run Code Online (Sandbox Code Playgroud)
还是我们必须使用这种格式?
if (cond)
true
else
false
end
Run Code Online (Sandbox Code Playgroud)
Leo*_*tny 28
对于单行if语句,MatLab没有三元运算符或任何其他语法糖.但是如果你的if语句非常简单,你可以将它写成一行:
if (cond); casetrue(); else; casefalse(); end
Run Code Online (Sandbox Code Playgroud)
它不像三元运算符那么简单,但仍然比用5行代码编写它更好.
Mat*_*ter 11
你可以做
var = 5 > 4;
Run Code Online (Sandbox Code Playgroud)
将var设置为true.只需用5> 4代替你需要的东西.
嗯......没有人提到过这个
fi = @(varargin)varargin{end-varargin{1}}
Run Code Online (Sandbox Code Playgroud)
在文档中的某个地方写的是"结束",所以这将是未来的证明
fi = @(varargin)varargin{length(varargin)-varargin{1}}
Run Code Online (Sandbox Code Playgroud)
用法:
fi(input('Do you like Matlab ? '),'yes','no')
>> no
Run Code Online (Sandbox Code Playgroud)
如果您需要内联案例,请参阅Mathworks ...
MATLAB没有条件表达式,但在某些情况下,你可以通过说,例如,得到类似的效果var = cond*true_expr + (1-cond)*false_expr.不像C的条件表达式,这当然总是同时评估true_expr和false_expr,如果cond碰巧不为0或1(注:false行为就像0; true行为就像1),你会变得疯狂的结果.
与目前提出的解决方案相比,以下解决方案具有两大优势:
if/语句不同,它也可以在匿名函数中使用。elsefunction out = tern(cond, resTrue, resFalse)
if cond
res = resTrue;
else
res = resFalse;
end
out = res(); %<--- The trick!
Run Code Online (Sandbox Code Playgroud)
实现延迟计算的技巧是最后一行tern计算所选结果。这样,您可以传递匿名函数tern,并且只有选定的函数才会被调用。
例如,当文件fileName不存在时,可以调用以下命令而不会出现错误:
x = tern( isfile( fileName), @()load( fileName ), ones(10 ));
Run Code Online (Sandbox Code Playgroud)
应该注意的是,res最后一行中的when 不是匿名函数而是不同的基本类型(例如数字、字符、单元格),其res()计算结果为res自身。
总之,与真正的三元运算符唯一的区别是,它需要添加@()到仅应有条件评估的参数中。
| 归档时间: |
|
| 查看次数: |
46798 次 |
| 最近记录: |