matlab中的三元运算符

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行代码编写它更好.

  • 不管怎样,Matlab 中的 lambda/匿名函数定义不支持简单的 if/switch/loop 语句。 (2认同)

Dar*_*uuk 12

如果你只需要真或假,你可以做一些MatlabSorter建议.如果你想要一个真正的第三级运算符(即a = b ? c : d),在MATLAB中没有.但是,使用此处提供的文件,您可以获得结束.


Mat*_*ter 11

你可以做

var = 5 > 4;
Run Code Online (Sandbox Code Playgroud)

将var设置为true.只需用5> 4代替你需要的东西.

  • 只有当你想要一个布尔结果时才能很好地工作. (9认同)
  • Na,您可以使用(a> b)作为因子,然后使用相反的语句添加另一个产品:`var =(a <0)*( - a)+(a> = 0)*(a)` (7认同)

Car*_*rel 9

嗯......没有人提到过这个

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 代码。不过使用起来很简单,耶! (8认同)

Gar*_*han 8

MATLAB没有条件表达式,但在某些情况下,你可以通过说,例如,得到类似的效果var = cond*true_expr + (1-cond)*false_expr.不像C的条件表达式,这当然总是同时评估true_exprfalse_expr,如果cond碰巧不为0或1(注:false行为就像0; true行为就像1),你会变得疯狂的结果.


use*_*530 6

与目前提出的解决方案相比,以下解决方案具有两大优势:

  1. 它支持惰性求值,即仅对选定的输入进行求值。
  2. 与打包在一行中的if/语句不同,它也可以在匿名函数中使用else
function 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自身。

总之,与真正的三元运算符唯一的区别是,它需要添加@()到仅应有条件评估的参数中。

  • 这也是节省“ones(10)”执行时间的选项。但是,它不会因“ones(10)”而失败。 (2认同)