2017-08-02 84 views
3

代碼進行Matlab的風格的短路操作:警告:對於運營商

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是包含的點的座標的列向量。 hw是圖像的尺寸。

我使用的代碼,這些線路在OCTAVE

但是當我運行它包含的是,儘管使用&的這些行我得到一個警告

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

是它的函數,八度正在執行&&操作?

我瞭解到,如果我使用&&,則根據第一個語句是TrueFalse,將評估下一個語句。

那麼,當我收到這個警告時,這是怎麼回事?那麼這個問題的解決方案是什麼?

我想檢查是否所有的陳述是True而不只是第一個。

回答

3

您可以通過使用&&運算符來安全地避免警告。

警告來自於一個事實,在此背景Matlab has a special handling&運營商:

當您使用逐元素&和|在 if或while循環表達式(僅在該上下文中)的情況下,它們使用短路來評估表達式。

爲了兼容性的原因,Octave檢測到這種行爲並模擬了Matlab的功能。請注意,它在Matlab中也可以完全安全地使用&&,因爲這是隱式使用的。

+0

但爲什麼會引發這樣的警告? – Siladittya

+2

正如我寫的,在if和loop表達式的上下文中隱含地將&放入'&&'是特定於Matlab的。如果您查看Octave的文檔,'&'是有規律的元素布爾表達式。如果你不想兼容Matlab,把它隱式地轉換成'&&'是非常不規則的,而且肯定會提出一個警告。鑑於Matlab的兼容性可能是Octave的高優先級,我個人發現發佈警告是嚴格性和兼容性之間的良好折衷。 – jsalonen

+0

但是當我使用代碼 'if(epsilon_c <0.05)&&(NA == 0)&&(round(xk(1))> 0)&&(round(xk(2))> 0)&&( round(xk(1)) Siladittya