Мое мнение таково, что при ожидаемом возврате функции необходимо бросить. В противном случае вызывающий (функция, вызывающая эту функцию) ожидает, что все будет в порядке. Обратите внимание, что disp('Error')
предоставляет информацию разработчику, но не дает программе никаких указаний на то, что происходит. Что еще более важно, информация не дает никаких указаний о том, где происходит ошибка. Это может заставить разработчика выполнять тяжелую отладку, чтобы найти ошибку, что совершенно не нужно.
Использование переменных выходных аргументов должно использоваться только в том случае, если следует ожидать разное количество выходных аргументов. Примером может служить некоторые индивидуальные функции участка
function varargout = myplot(varargin)
filename = '';
idx = find(strcmp(varargin,'filename'));
if (~isempty(idx) && length(varargin)<idx+1 && ~ischar(varargin{idx+1}))
error('filename property must be followed by a directory');
elseif(~isempty(idx))
filename = varargin{idx+1};
varargin([idx,idx+1]) = [];
end
h = plot(varargin{:});
varagout{1} = h;
if (~isempty(idx))
save(filename, h);
end
varagout{2} = filename;
Эта функция работает как plot
кроме него сохраняет рисунок в файл в случае, если указанный имя файла. В случае, если разработчику нужен дескриптор, он будет возвращен, и в случае, если разработчику понадобится каталог сохранения, он также может быть возвращен. Однако ни один из этих аргументов не нужен. Разработчик может захотеть использовать эту функцию в качестве стандартной функции построения графика, и это означает, что пользователь может вызвать myplot
как myplot(x,y);
, который не возвращает значение. Кроме того, обратите внимание, что даже если 'filename'
не указан, функция может вернуть два выхода. Второй вывод может быть пустым массивом символов, но два выхода для вызывающего абонента никогда не вызовут сбой.
Также обратите внимание, что дальнейшая обработка ошибок не требуется. Единственные непроверенные аварии - в plot
и save
. То, как это обрабатывается, может быть разным для разных пользователей, и это означает, что только разумно позволить пользователю уловить ошибку и обработать ее (как это было бы сделано, если бы сэкономили или забросили бы сюжет).
Кроме того, вы также можете иметь чек, чтобы количество выходных переменных находилось в правильном диапазоне (в данном случае 0,1 или 2 выхода).
Если у него есть только один выход, удалите 'varargout' и верните' muln'. В противном случае вы также можете проверить 'nargout', который работает точно так же, как' nargin', только для выходов. – hbaderts
Я использовал бы [error] (http://se.mathworks.com/help/matlab/ref/error.html), который выдает исключение. То есть. 'error ('Недостаточно входных аргументов')', возвращаемое значение не используется. –