我正在使用 strfind
进行“或”比较,如下所示:
name='hello';
if strfind(name,'hello') | strfind(name,'hi')
disp('yes!')
end
>> yes!
if
语句必须评估为 true
,因为显示了 yes!
。
相比之下,如果交换语句,MATLAB 不会返回 yes!
:
if strfind(name,'hi') | strfind(name,'hello')
disp('yes!')
end
为什么?
最佳答案
这是因为短路。短路逻辑运算符可以加快代码速度。你可以拥有
if veryShort | superlongComputation
所以 MATLAB 所做的是首先计算 veryShort
,如果为真,则无需计算第二个! if 条件已经满足。
在你的例子中 strfind(name,'hello')
返回 1
,但是 strfind(name,'hi')
返回 []
.
在第一个例子中,当第一个评估的东西返回 1
时,你就可以显示了。然而在第二种情况下,它返回 []
,因此 MATLAB 计算 if
中的第二个东西,并返回 1
。然后 MATLAB 应用 或
操作,其中 [] | 1
是一个 0x0 空逻辑数组
,所以 if
不成立。
请注意,通常您希望使用 ||
来强制短路,但是 |
也会这样做,如果它在 while
或 if
:
关于matlab - 带有 'or' 运算符的 if 语句在交换条件时给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50177486/