переключатель Matlab + регулярное выражение - PullRequest
0 голосов
/ 29 мая 2019

Я пытался прочитать это, но я думаю, что, возможно, в корне ошибаюсь. Вот что я хочу:

  • У меня есть непредсказуемое значение пользовательского ввода, например a='test1', которые могут сильно варьироваться
  • Я хочу протестировать различные сценарии для входных строк, где некоторое нечеткое сопоставление должно происходить для всех определенных сценариев, но должно вернуться к значению по умолчанию, если ни один не применяется

Так что в идеале я подумал, что мне нужна такая структура дел:

a='test1';
switch a
  case ~isempty(regexpi(a,'test','match','once')) %should handle all cases where 'test' is contained in the input string
    disp('this');
  otherwise %should handle everything else
    disp('that');
end

но всегда выдает that.

Как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Вы используете char (символьный массив) a в качестве переменной переключения и результат выражения logical (true / false) как случай, этовсегда будет идти иначе, потому что char не является logical.

Вы можете использовать результат логического выражения в качестве переменной переключения и использовать true как случай:

a='test1';
switch ~isempty(regexpi(a,'test','match','once'))
  case  true %should handle all cases where 'test' is contained in the input string
    disp('this');
  otherwise %should handle everything else
    disp('that');
end

Или просто используйте оператор if-else:

a='test1';
if ~isempty(regexpi(a,'test','match','once'))
    disp('this');
else %should handle everything else
    disp('that');
end
1 голос
/ 29 мая 2019

Как написано, вы сравниваете результат логического выражения со значением, которое вы тестируете, a.Это никогда не будет совпадать, поэтому просто используйте switch true.

Случаи оцениваются по порядку, так что это эквивалентно использованию конструкции

if ...
    % Do something
elseif ...
    % Do something else
else
    % Otherwise
end

, которая, как некоторые могут утверждать, является предпочтительной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...