web-dev-qa-db-ja.com

警告: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は画像のサイズです。

私はこれらのコード行を[〜#〜]オクターブ[〜#〜]で使用しています

しかし、これらの行を含む関数を実行すると、警告が表示されます

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

&を使用しているにもかかわらず、octave&&操作を実行しているということですか?

&&を使用すると、最初のステートメントがTrueまたはFalseであるかどうかに応じて、次のステートメントが評価されることを学びました。

それで、これは私がこの警告を受け取ったときに何が起こっているのですか?では、この問題の解決策は何ですか?

最初のステートメントだけでなく、すべてのステートメントがTrueであるかどうかを確認したいと思います。

6
Siladittya

代わりに&&演算子を使用すると、警告を安全に回避できます。

警告は、このコンテキストでの&演算子に対して Matlabには特別な処理があります という事実から来ています。

要素ごとに&と|を使用する場合ifまたはwhileループ式のコンテキストで(そしてそのコンテキストでのみ)演算子は、短絡を使用して式を評価します。

互換性の理由から、Octaveはこの動作を検出し、Matlabの動作をエミュレートします。とにかく暗黙的に使用されるので、Matlabでも&&を使用するのは完全に安全であることに注意してください。

9
jsalonen