Gibt es eine Möglichkeit, in MATLAB eine switch
-Anweisung zu verwenden, um ein Zellenarray mit Strings zu bearbeiten, so dass die erste case-Anweisung ausgeführt wird, deren string-Argument mit einem der Strings im Zellenarray übereinstimmt ?MATLAB-Schaltergehäuse mit Zellenfeld mit Strings
Der Kontext dieses Problems liegt in der Behandlung von Fehlern in einem catch
Block.
Nehmen wir an, ich versuche, eine Bilddatei zu laden:
path = 'c:\where my files are located';
format = 'MRIm%03d.dcm';
try
firstheader = dicomread(fullfile(path, sprintf(format, 1)));
catch ex
% extract last segment of exception identifier
idSegLast = regexp(ex.identifier, '(?<=:)\w+$', 'match');
switch idSegLast
case 'noFileOrMessagesFound'
disp('No File Or Messages Found');
return;
case 'fileNotFound'
disp('File Not Found');
return;
otherwise
rethrow(ex);
end
end
Die switch
Anweisung im Code oben nicht funktioniert, weil idSegLast eine Zelle Array von Strings ist. In den meisten Fällen hat idSegLast nur ein Element, aber möglicherweise mehrere Elemente, wenn mehrere Ausnahmen ausgelöst werden.
Natürlich ist die switch-Anweisung oben kann (was nicht funktioniert) mit dem folgenden if-else-Block ersetzt werden, die das gewünschte Verhalten implementiert:
if (strcmp(idSegLast, 'noFileOrMessagesFound'))
disp('No File Or Messages Found');
return;
elseif (strcmp(idSegLast, 'fileNotFound'))
disp('File Not Found');
return;
else
rethrow(ex);
end
jedoch als zusätzliche Ausnahmebehandlung hinzugefügt werden der Code, wird es unweigerlich weniger lesbar als ein switch
- case
Konstrukt wäre. Ich versuche immer, die Qualität meines Codes und seine Lesbarkeit zu verbessern. Gibt es einen besseren Weg?
Sind Sie sicher, dass Ihre Implementierung mit 'if' wie vorgesehen funktioniert ?. Denn soweit ich sehen kann 'if ([1; 0])' wird als falsch gewertet –
Was ist das Problem mit der 'if-else' Option? Es ist absolut lesbar. – Adiel
Und für @NoelSeguraMeraz Frage, nehme ich an, dass Sie 'wenn überhaupt (strcmp (....))' schreiben möchten – Adiel