我有同樣的問題,並尋找一個通用的解決方案,在一個腳本,參數是作爲字符串傳遞的問題,而是需要作爲標量或向量。 假設你有以下功能
function myfunc(arg1, arg2, varargs)
end
,你也許希望能這樣稱呼它
myfunc(1, [1 2 3], 'optional1', 2)
,也喜歡
myfunc('1', '[1 2 3]', 'optional1', '2')
,這樣就可以編譯和使用它在命令行上就像
myfunc 1 '[1 2 3]' optional1 2
對於這一點,我寫了下面的功能:
function r=evalArguments(parser, arguments)
% Evaluates parsed arguments' values.
% Given a parser containing parsed arguments, all string values of the
% arguments specified by parameter "arguments" are evaluated
% and the complete results is returned in a new struct.
r = parser.Results;
for j=1:length(arguments)
argValue = r.(arguments{j});
if ischar(argValue)
r.(arguments{j}) = eval(argValue);
end
end
end
然後我可以使用inputParser在myfunc
這樣的:
p = inputParser;
p.addRequired('arg1');
p.addRequired('arg2');
p.addParameter('optional1', 0);
p.parse(arg1, arg2, varargin{:});
nonStringArguments = {'arg1', 'arg2', 'optional1'};
args = evalArguments(p, nonStringArguments);
...
x = args.arg1;
y = args.arg2;
z = args.optional1;
由於我沒有找到一個不折不扣的-the-盒子的方式來做到這一點,我在這裏發佈這個解決方案,並希望它也可能對其他人有用。 如果有更好的方法來實現這一點,請讓我知道。
返回的值是什麼? – guilhermecgs 2013-10-10 17:16:32