我目前正在运行较旧版本的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
答案 0 :(得分:2)
在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
那会有效。额外的功劳,并且改进了可维护性,您可以使用参数名称和默认值定义单元格数组或结构,并在该结构上编写循环,而不是复制相同的模板代码并冒着复制/粘贴错误的风险。
编辑: 这声称是输入解析功能的一个例子。我没有测试过,但它可能是一个可以开始的地方。