代码:
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
xw
是包含点坐标的列向量。
h
和 w
是图像的尺寸。
我在 OCTAVE
中使用这些代码行但是当我运行包含这些行的函数时,我收到警告
warning: Matlab-style short-circuit operation performed for operator &
是否尽管使用了
&
,octave仍在执行&&
操作?
我了解到,如果我使用
&&
,则根据第一个语句是 True
或 False
,对下一个语句进行评估。
那么,当我收到此警告时,这就是发生的情况吗?那这个问题有什么办法解决呢?
我想检查是否所有陈述都是
True
而不仅仅是第一个。
您可以使用
&&
运算符来安全地避免警告。
该警告来自以下事实:Matlab 在这种情况下对 &
运算符有特殊处理:
当您使用逐元素 & 和 | 时上下文中的运算符 if 或 while 循环表达式(并且仅在该上下文中),它们使用 短路计算表达式。
出于兼容性原因,Octave 会检测此行为并模拟 Matlab 的行为。请注意,在 Matlab 中使用
&&
也是完全安全的,因为无论如何这都是隐式使用的。
Jsalonen 的答案是正确的,但我想提供一个替代解决方案,即:关闭警告。原因是,在某些情况下,出现警告是因为您的程序正在调用其他人编写的例程或程序,而且它们的数量通常太多,以至于查找所有出现 & 运算符的位置非常耗时。只需在 Octave 的命令行中输入以下内容即可关闭警告:
警告(“关闭”,“Octave:可能的 matlab 短路运算符”)