matlab - 带有 'or' 运算符的 if 语句在交换条件时给出不同的结果

标签 matlab string-comparison logical-operators

我正在使用 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 不成立。

请注意,通常您希望使用 || 来强制短路,但是 | 也会这样做,如果它在 whileif:

https://uk.mathworks.com/matlabcentral/answers/99518-is-the-logical-operator-in-matlab-a-short-circuit-operator

关于matlab - 带有 'or' 运算符的 if 语句在交换条件时给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50177486/

相关文章:

jquery - JavaScript case 语句中的逻辑 OR 运算符

if-statement - 为什么一个变量与多个值的不相等检查总是返回 true?

r - 比较 R 与 Matlab 的数据挖掘

matlab - 我想对矩阵 A 的列进行分组,这些列在 Matlab 中的第三行具有相同的值

bash - 在 bash 中,如何进行比较并将 bool 结果分配给变量

linux - Bash - 比较两个命令的输出

cocoa-touch - 比较两个 NSStrings

Ruby 逻辑运算符

matlab - 在简单的程序中使用 MATLAB 的 'keyPressFcn'

image - 如何在 MATLAB 中读取 RAW 图像?