警告:为操作员执行Matlab式短路操作

Sil*_*tya 5 octave

码:

if (round(xw(1))>2) & (round(xw(2))>2) & (round(xw(1))<h-1) & (round(xw(2))<w-1)
        W0 = img(round(xw(1))-2:round(xw(1))+2,round(xw(2))-2:round(xw(2))+2);
else
        NA=1;
        break
endif
Run Code Online (Sandbox Code Playgroud)

xw是一个列向量,包含一个点的坐标. h并且w是图像的尺寸.

我在OCTAVE中使用这些代码行

但是当我运行包含这些行的函数时,我会收到警告

warning: Matlab-style short-circuit operation performed for operator &

是否尽管使用&,八度音程正在进行&&操作?

我了解到如果我使用&&那么取决于第一个语句是True或者False,下一个语句被评估.

那么,当我收到此警告时,这是发生了什么事吗?那么这个问题的解决方案是什么?

我想检查是否所有的陈述都是True,而不仅仅是第一个.

jsa*_*nen 8

您可以使用&&操作员安全地避免警告.

警告来自Matlab&在此上下文中对操作员进行特殊处理的事实:

当你使用元素方式&和| 在if或while循环表达式的上下文中的运算符(并且仅在该上下文中),它们使用短路来计算表达式.

出于兼容性原因,Octave会检测此行为并模拟Matlab的功能.请注意,&&在Matlab中使用它也是完全安全的,因为无论如何都是隐含使用的.

  • 正如我所写,在if和循环表达式的上下文中隐式地将`&`转换为`&&`是特定于Matlab的.如果你看一下Octave的文档,`&`是有规律的逐元素布尔表达式.如果你不想要Matlab兼容性,那么将它隐式转换为'&&`是非常不规则的,并且肯定会引发警告.鉴于Matlab兼容性可能是Octave的高优先级,我个人发现警告是严格和兼容性之间的良好折衷. (3认同)