if 4 | []
disp('Must be true')
end
Must be true
MATLAB evaluates
4 | []
as true.
However, swapping the order of the argument to | results in a false.
if [] | 4
disp('Must be true')
else
disp('Must be false')
end
Must be false
There are several concepts that might be helpful for understanding this mystery.
- Empty arrays evaluate to false for the purposes of if and while.
- The nonscalar | and & operators short-circuit in if and while expressions, but not otherwise.
- It's best to feed if and while scalar expressions. This means considering using the newer (MATLAB version 6.5) logical operators || and &&. These operators always short-circuit.
- Use reduction operations explicitly to reduce expressions to scalar. Examples of these operations include all and any.