Вы, вероятно, хотите strcmp
, а не ==
.С a==b
вы получаете поэлементное сравнение.Таким образом, вы получите логический вектор как результат;и если a
и b
имеют различное количество символов, вы получите ошибку.
Тот факт, что вывод ==
является логическим вектором поэлементных сравнений - то, что вызывает сообщение m-lint.||
и &&
требуют скалярных аргументов.
Наконец, в (ext == '.s2p' || '.s3p')
вы, вероятно, имели в виду (ext == '.s2p' || ext == '.s3p')
.
Объединение всего вышеперечисленного:
elseif strcmp(ext,'.s2p') || strcmp(ext,'.s3p')
Для ясности и читаемости вы можете использовать функцию ismember
с массивом ячеек расширений для сравнения с:
elseif ismember(ext, {'.s2p' ,'.s3p'})
или, как указал Крис Луенго,
elseif any(strcmp(ext, {'.s2p', '.s3p'}))
Еще лучше, вместо серии elseif
утверждений, которые вы можете использовать switch
, что неявно применяется strcmp
/ ismember
для каждого case
:
switch ext
case {'sp2', 'sp3'}
% Do stuff
case {'aaa', 'bbb'}
% Do stuff
otherwise
error('Unrecognized extension')
end