matlab中的三元运算符

时间:2011-04-08 12:18:38

标签: matlab if-statement ternary-operator conditional-operator

是否可以输入以下内容:

var = (cond) ? true : false;

还是我们必须使用这种格式?

if (cond)
 true
else
 false
end

9 个答案:

答案 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_exprfalse_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}}:

&&

规则:

    必须使用
  1. 快捷布尔操作(cond) && ((var=true_val)||1) || (var=false_val); || &&|
  2. 将适用于布尔,数字和字符分配
  3. 不能与单元格数组或函数句柄一起使用
  4. 作业必须用括号括起来。
  5. &后跟(var=true_val),以防||1
  6. true false 分配可能是不同的变量(即true_val == false(var1=true_val)
  7. (var2=false_val)true_val可以是不同的类型,只要可以分别将其评估为布尔值即可。

或者可以做到这一点:

false_val

提供的cond && (func1(..)||1) || func2(...); func1返回一个布尔可测试值,其中不包含任何值(但不包含任何单元格数组!):