罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

空阵列的控制流和逻辑运算符

在阅读上周的文章在计算空数组,我的一个同事提到的一些其他行为空数组,在过去他绊倒。今天,我将讨论空数组如何工作在控制流表达式的上下文(条件和循环,即如果)和短路运算符(例如,& &和| |)。

内容

空阵列的控制流

让我先从平原在控制流情况下空数组。例如,将这个代码做什么?

E = [];如果E disp(空是真实的)其他disp(空是假的)

读者记得我上周评论的博客将正确地猜,空的表达式如果声明被视为。为什么?我想是这样的。如果我寻找一些条件在一个数组的位置,我找不到他们,最终得到一个空的输出。这个输出的那种表情,我可能会想要使用,不知为什么,在一个如果声明。让我们试一试。

E = [];如果E disp (空是正确的)其他的disp (空是假的)结束
空是假的

形势变得更加复杂,如果是一个逻辑的表达式如果声明有一个空数组的一个元素。让我告诉你我的意思。套用的文档,

然而有一些条件下,虽然在一个空数组值为true。两个这样的例子
一个= [];尽管所有(A), doSomething结束,而1 |,doSomething,结束

让我们看看发生了什么在每一个例子。在第一个函数所有被称为空输入。根据下面的第二参考(空数组),这个函数所有是一个空的函数,返回一个非零值的输入。让我们来看看。

阿莱=所有(E) allEislogical = islogical(阿莱)
阿莱= 1 allEislogical = 1

我认为这是没有E,因此真正的结果。

与逻辑运算符空数组

第二个表达式是一个elementwise逻辑算符(|)。在这种情况下,表达式的第一部分,1第二部分,是真实的,所以,在elementwise之后没有评估。事实上,一个空的结果返回从来没有在这里发挥作用。为什么?因为&,|运营商短路当且仅当它们的上下文中如果表达式。否则,elementwise运营商短路。

相比之下,逻辑运算符& &,| |,总是短路,不管上下文。

短路逻辑运算符(| | & &)

下一个重要的观点,短路逻辑运算符预期标量表达式的输入。这意味着一个空数组,而不是一个标量,可能会导致一些悲伤如果你准备情况。让我告诉你我的意思。比较以下2代码片段。

真正的| | E
ans = 1
试一试E | |真我disp (ME.message)结束
操作数的| |和& &操作符必须转换逻辑标量值。

在第二个片段,表达E | |真的

产生一个错误,因为E不是一个标量值。一旦发生错误,第二个操作数是没有评估。与之对比的是片段,第一个输入评估真正的。短路然后接管,第二个操作数,它会导致一个错误在这种情况下,没有评估。

例子

这里有一些更多的代码示例来帮助你看到的模式。试着找出答案之前阅读结果。

如果[]disp (“你好”)其他的disp (“再见”)结束
再见
真正的| []
ans = []
[]|真
ans = []
真正的| | []
ans = 1
试一试[]| |真的我disp (ME.message)结束
操作数的| |和& &操作符必须转换逻辑标量值。
如果真正的| []disp (“你好”)其他的disp (“再见”)结束
你好
如果[]|真实disp (“你好”)其他的disp (“再见”)结束
再见
如果真正的| | []disp (“你好”)其他的disp (“再见”)结束
你好
试一试如果[]| |真实disp (“你好”)其他的disp (“再见”)结束我disp (ME.message)结束
操作数的| |和& &操作符必须转换逻辑标量值。

引用

这里有一群引用MATLAB这一信息文档,所有的地方都是。

空的想法吗?

空了在MATLAB的行为,我相信,一致的和有用的。尽管如此,细节掌握的行为有很多,可以混淆。如果你有任何想法,请回应在这里




使用MATLAB®7.9发表


评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。