警告:为运算符 &

问题描述 投票:0回答:2

代码:

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
而不仅仅是第一个。

octave
2个回答
20
投票

您可以使用

&&
运算符来安全地避免警告。

该警告来自以下事实:Matlab 在这种情况下对 &

 运算符有特殊处理

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

出于兼容性原因,Octave 会检测此行为并模拟 Matlab 的行为。请注意,在 Matlab 中使用

&&
也是完全安全的,因为无论如何这都是隐式使用的。


0
投票

Jsalonen 的答案是正确的,但我想提供一个替代解决方案,即:关闭警告。原因是,在某些情况下,出现警告是因为您的程序正在调用其他人编写的例程或程序,而且它们的数量通常太多,以至于查找所有出现 & 运算符的位置非常耗时。只需在 Octave 的命令行中输入以下内容即可关闭警告:

警告(“关闭”,“Octave:可能的 matlab 短路运算符”)

© www.soinside.com 2019 - 2024. All rights reserved.