Lay*_*Lay 5 matlab short-circuiting logical-operators
是什么之间的区别|
,并||
在MATLAB逻辑运算符?
一个重要的区别是元素操作符可以在数组上操作,而短路操作符只适用于标量逻辑操作数.
但可能关键的区别在于短路问题.对于短路运算符,表达式从左到右进行评估,一旦确定最终结果,就不会评估剩余项.
例如,考虑一下
x = a && b
Run Code Online (Sandbox Code Playgroud)
如果a
评估为false
,那么我们知道a && b
评估结果与评估结果false
无关b
.所以没有必要进行评估b
.
现在考虑这个表达式:
NeedToMakeExpensiveFunctionCall && ExpensiveFunctionCall
Run Code Online (Sandbox Code Playgroud)
在哪里我们想象ExpensiveFunctionCall
需要很长时间才能评估.如果我们可以执行其他一些便宜的测试,允许我们跳过调用ExpensiveFunctionCall
,那么我们就可以避免调用ExpensiveFunctionCall.
所以,假设NeedToMakeExpensiveFunctionCall
评估为false
.在那种情况下,因为我们使用了短路运算符,所以ExpensiveFunctionCall
不会被调用.
相反,如果我们使用元素方式运算符并编写如下函数:
NeedToMakeExpensiveFunctionCall & ExpensiveFunctionCall
Run Code Online (Sandbox Code Playgroud)
然后ExpensiveFunctionCall
永远不会跳过调用.
事实上,我希望您已阅读的MATLAB文档包含一个很好的例子,可以很好地说明这一点:
x = (b ~= 0) && (a/b > 18.5)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,a/b
如果b
为零,我们就无法执行.因此测试b ~= 0
.使用短路运算符意味着我们避免计算a/b
何时b
为零,从而避免可能出现的运行时错误.显然,元素逻辑运算符将无法避免运行时错误.
有关短路评估的更长时间的讨论,请参阅有关该主题的维基百科文章.
归档时间: |
|
查看次数: |
5535 次 |
最近记录: |