Оба следующих условия являются пустыми []
:
name='hello';
strfind(name,'hello') | strfind(name,'hi'); % = []
strfind(name,'hi') | strfind(name,'hello'); % = []
Как указано в ответе Андер , оператор |
использует короткое замыкание , чтобы пропустить оценку второго условия, если первое является ложным (или пустым).
Некоторая быстрая отладка даст вам лучшее понимание, если мы проигнорируем короткое замыкание:
strfind(name,'hi'); % = []
strfind(name,'hello'); % = 1
В обоих случаях вы делаете «если пусто или не ноль», что является пустым, а «if []
» ложно (этот условный оператор не будет выполнен).
То, что вы хотите использовать, чтобы быть явным, выглядит примерно так:
if ~isempty(strfind(name, 'hello')) & ~isempty(strfind(name, 'hi'))
disp('yes!')
end
Здесь мы гарантируем, что все, что оценивается в операторе if
, является булевой переменной, а не пустым или возвращает индекс, такой как strfind
, поэтому неожиданные результаты менее вероятны.
Существуют более простые методы, такие как strcmp
или ismember
, если ваши строки должны точно соответствовать. Или contains
, если у вас R2016b или новее:
if contains('hello', {'hello','hi'})
disp('yes!');
end