空阵列的控制流和逻辑运算符
在阅读上周的文章在计算空数组,我的一个同事提到的一些其他行为空数组,在过去他绊倒。今天,我将讨论空数组如何工作在控制流表达式的上下文(条件和循环,即如果和而)和短路运算符(例如,& &和| |)。
内容
空阵列的控制流
让我先从平原在控制流情况下空数组。例如,将这个代码做什么?
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的行为,我相信,一致的和有用的。尽管如此,细节掌握的行为有很多,可以混淆。如果你有任何想法,请回应在这里。
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。