是否可以输入以下内容:
var = (cond) ? true : false;
还是我们必须使用这种格式?
if (cond)
true
else
false
end
答案 0 :(得分:26)
MatLab没有三元运算符,也没有单行if语句的任何其他语法糖。但是如果你的if语句非常简单,那么无论如何你都可以把它写成一行:
if (cond); casetrue(); else; casefalse(); end
它不像三元运算符那么简单,但仍然比用5行代码编写它更好。
答案 1 :(得分:10)
如果您只需要真或假,您可以执行MatlabSorter
建议的操作。如果你想要一个真正的第三级运算符(即a = b ? c : d
),MATLAB中就没有。但是,使用提供的文件here,您可以关闭。
答案 2 :(得分:9)
你可以做到
var = 5 > 4;
将var设置为true。只需用5>代替你需要的东西。 4。
答案 3 :(得分:8)
MATLAB没有条件表达式,但在某些情况下,您可以通过说出var = cond*true_expr + (1-cond)*false_expr
来获得类似的效果。与C的条件表达式不同,这当然总是评估true_expr
和false_expr
,如果cond
恰好不是0或1(注意:false
表现得像0 ; true
表现得像1)你会得到疯狂的结果。
答案 4 :(得分:8)
fi = @(varargin)varargin{end-varargin{1}}
在文档中的某个地方写的是“结束”即将到来,所以这将是更加未来的证据
fi = @(varargin)varargin{length(varargin)-varargin{1}}
用法:
fi(input('Do you like Matlab ? '),'yes','no')
>> no
如果您需要内联案例,请参阅Mathworks ...
答案 5 :(得分:1)
我经常使用这种风格:
cond = what < ever;
n = getfield([23,42], {1+(what < ever)}) % for any 1x1-data
s = cell2mat(getfield({'no','yes'}, {1+(what < ever)})) % for nonuniform
它足够紧凑,不需要辅助功能
答案 6 :(得分:1)
替换
c = (x ? a : b)
作者
c = subsref({b; a}, substruct('{}', {x + 1}))
x应为布尔值或1或0。
true或1将选择一个
false或0将选择b
这应该可以处理所有包含的细胞,也可以用于复杂的配方器中!
答案 7 :(得分:1)
快速优雅。我只写tern(a> b,a,b) 缺点是您必须复制粘贴到任何地方,或者在目录中有多余的文件
function b = tern(cond, a, b)
if cond
b=a;
end
end
答案 8 :(得分:0)
@Leonid Beschastny对于内联if-else-end
语句是正确的,但是如果必须这样做,则可以将任何赋值视为布尔值,可以使用快捷布尔值运算符||
和{{ 1}}:
&&
规则:
(cond) && ((var=true_val)||1) || (var=false_val);
和||
,不 &&
或|
&
后跟(var=true_val)
,以防||1
true_val == false
而(var1=true_val)
)(var2=false_val)
和true_val
可以是不同的类型,只要可以分别将其评估为布尔值即可。或者可以做到这一点:
false_val
提供的cond && (func1(..)||1) || func2(...);
和func1
返回一个布尔可测试值,其中不包含任何值(但不包含任何单元格数组!):