Эквивалент InputParser на более старой версии Matlab? - PullRequest
1 голос
/ 17 февраля 2012

В настоящее время я использую более старую версию Matlab - 7.0.4, если быть точным, и пытаюсь преобразовать код, включающий более новый InputParser, в код, который будет работать с этой более старой версией.Мне было интересно, есть ли какие-либо подобные команды, такие как inputParser, которые можно использовать.

Это часть кода, которую я пытаюсь преобразовать.

p=inputParser;
p.addParamValue('clusters', repmat(2,k,1), @(x)isvector(x) && length(x)==k);
p.addParamValue('numit', 1000, @(x)x>0 && mod(x,1)==0);
p.addParamValue('abort', 1e-10, @(x)x>=0);
p.addParamValue('verbose', true, @islogical);
p.addParamValue('verbosecompact', true, @islogical);
p.parse(varargin{:});
res=p.Results;
r=res.clusters;
if res.verbose
    fprintf('starting graphclustering of %i-partite graph with partition sizes: ',k);
    disp(n');
end

1 Ответ

2 голосов
/ 17 февраля 2012

До InputParser я использовал от 50 до 100 строк кода в начале некоторых сложных функций. (Или вы можете попытаться свернуть свой собственный эквивалент класса InputParser.)

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

%Check for Clusters
ix = find(cellfun(@(x)strcmpi(x,'clusters'),varargin));
if ~isempty(ix) && (ix+1)<length(varargin)
    rec.clusters = varargin{ix+1};
else
    rec.clusters = repmat(2,k,1);
end

%Check for 'numit'
% ... following the template above

Это сработает. Для дополнительного кредита. и улучшенная удобство сопровождения, вы можете определить массив или структуру ячеек с именами параметров и значениями по умолчанию и записать цикл над этой структурой, а не копировать тот же код шаблона и рисковать ошибками копирования / вставки.


Edit: Это подразумевает пример функции разбора ввода. Я не проверял это, но это может быть где-то для начала.

http://www.mathworks.com/matlabcentral/fileexchange/10670-parseargs-simplifies-input-processing-for-functions-with-multiple-options

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