matlab中的三元运算符

Posted

技术标签:

【中文标题】matlab中的三元运算符【英文标题】:ternary operator in matlab 【发布时间】:2011-08-01 11:36:27 【问题描述】:

有没有办法输入 if like:

var = (cond) ? true : false;

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

if (cond)
 true
else
 false
end

【问题讨论】:

但对于更一般的情况,请在此处查看一些答案:***.com/questions/27561881/… 【参考方案1】:

快速而优雅。我会简单地写 tern(a>b, a, b) 缺点是你必须到处复制粘贴,或者在目录中有额外的文件

function b = tern(cond, a, b)
    if cond
        b=a;
    end
end

【讨论】:

【参考方案2】:

@Leonid Beschastny 关于内联if-else-end 语句是正确的,但如果必须,那么对于任何可以评估为布尔值的赋值值,都可以使用快捷布尔运算符||&&

(cond) && ((var=true_val)||1) || (var=false_val);

规则:

    必须使用快捷布尔操作||&&不能 |& 可用于布尔、数字和字符赋值 将使用元胞数组或函数句柄 作业必须用括号括起来。 (var=true_val) 后面必须跟||1 以防true_val == false truefalse 分配可能针对不同的变量(即(var1=true_val)(var2=false_val)true_valfalse_val 可以是不同的类型,前提是每个类型都可以评估为布尔值

也可以这样做:

cond && (func1(..)||1) || func2(...);

如果 func1func2 返回一个可测试的布尔值,不包括任何内容(但不包括元胞数组!):

【讨论】:

这是哪个 Matlab 版本?我有 R2018a,分配 var=true_val 不起作用。 Matlab 报语法错误。【参考方案3】:

替换

c = (x ? a : b)

通过

c = subsref(b; a, substruct('', x + 1))

x 应该是一个布尔值或 1 或 0。 true 或 1 将选择一个 false 或 0 将选择 b 这应该适用于所有单元格可以包含的内容,也可以用于复杂的公式!

【讨论】:

注意:a 和 b 都被评估。这可能与 if ... else ... end 有所不同。【参考方案4】:

我经常使用这种风格:

cond = what < ever;

n = getfield([23,42], 1+(what < ever)) % for any 1x1-data
s = cell2mat(getfield('no','yes', 1+(what < ever))) % for nonuniform

它足够紧凑,不需要辅助函数

【讨论】:

【参考方案5】:

嗯...没有人提到这个

fi = @(varargin)vararginend-varargin1

在文档中某处写着“结束”即将到来,因此这将是更多的未来证明

fi = @(varargin)vararginlength(varargin)-varargin1

用法:

fi(input('Do you like Matlab ? '),'yes','no')
>> no

如果您需要内联案例,请参阅Mathworks ...

【讨论】:

【参考方案6】:

MatLab 没有三元运算符,也没有任何其他用于单行 if 语句的语法糖。但是如果你的 if 语句真的很简单,你也可以只写一行:

if (cond); casetrue(); else; casefalse(); end

它不像三元运算符那么简单,但还是比用5行代码写的要好。

【讨论】:

无论多么简单,Matlab 中的 lambda/匿名函数定义都不支持 if/switch/loop 语句。【参考方案7】:

MATLAB 没有条件表达式,但在某些情况下,您可以通过说,例如 var = cond*true_expr + (1-cond)*false_expr 来获得类似的效果。与 C 的条件表达式不同,这当然总是计算 true_exprfalse_expr,如果 cond 恰好不是 0 或 1(注意:false 的行为类似于 0;true 的行为类似于 1)你会得到疯狂的结果。

【讨论】:

应该可以创建一个接受一个条件和两个函数句柄的函数。然后你就有了想要的快捷方式行为。 优雅但仅适用于数字表达式,我尝试使用字符串并将它们作为 ASCII 值数组返回 如果true_exprfalse_exprinf,这也不起作用【参考方案8】:

如果你只需要真假,你可以按照MatlabSorter的建议去做。如果您想要一个真正的三级运算符(即a = b ? c : d),MATLAB 中没有。但是,使用here 提供的文件,您可以接近。

【讨论】:

【参考方案9】:

你可以的

var = 5 > 4;

这会将 var 设置为 true。只需将您需要的替换为 5 > 4。

【讨论】:

不,您可以使用 (a > b) 作为因子,然后添加另一个具有相反语句的产品:var = (a &lt; 0) * (-a) + (a &gt;= 0) * (a) 如果我们需要在 disp 或 fprintf 中使用三元运算符?

以上是关于matlab中的三元运算符的主要内容,如果未能解决你的问题,请参考以下文章

kotlin中的三元运算符[重复]

ReactJs 卡头中的三元运算符

C中的三元(条件)运算符

NavigationLink SwiftUI 中的三元运算符

Lua 中的三元运算符(函数)

Python中的三元运算