MATLAB中是否有单行内容?
if a > b
foo = 'r';
else
foo = 'g';
end
答案 0 :(得分:8)
不像C风格的三元运算符那样优雅,但是您可以利用matlab在这种情况下自动将逻辑转换为双精度的事实。因此,您可以将您想要的结果乘以您的条件(r
)的真实(a > b
),并将其添加到您想要的结果的产品中(即g
) not 你的条件:
foo = (a > b)*c + (~(a > b))*d
因此,如果我们允许c = 'r'
和d = 'g'
,那么我们需要做的就是在结尾处将foo
投回char
:
char(foo)
或
char((a > b)*'r' + ~(a > b)*'g')
请注意,这仅在c
和d
具有相同尺寸时才有效(因为+
)...
答案 1 :(得分:8)
MatLab中的单行if语句没有语法糖,但如果你的语句很简单,你可以把它写成一行。
我过去常常在我的旧项目中使用单行if语句:
if (k < 1); k = 1; end;
在你的情况下,它看起来像:
if a > b; foo = 'r'; else; foo = 'g'; end;
或者,如果你不喜欢分号
if a > b, foo = 'r'; else, foo = 'g'; end
不如你想象的那么漂亮。
答案 2 :(得分:5)
尽量避免在matlab中使用if语句,只需将逻辑转换为(vector)math:
foo = 1 + (a <= b)
编辑:
对于更一般的情况,分配&#39; r&#39;或者&#39; g&#39;,您可以使用:
col = {'r', 'g'};
foo = col(1 + (a > b));
例如,使用isGreen布尔值可以:
foo = col(1 + isGreen);
这也可以是一个布尔返回函数
foo = col(1 + isGreen(a))