我曾经遇到同样的问题,搜索了一种通用解决方案,解决脚本中参数作为字符串传递但需要作为标量或向量的问题。假设你有以下函数:
function myfunc(arg1, arg2, varargs)
end
你可能希望能够像这样调用它
myfunc(1, [1 2 3], 'optional1', 2)
and also like
myfunc('1', '[1 2 3]', 'optional1', '2')
这样你就可以编译它,并像使用命令行一样使用它
myfunc 1 '[1 2 3]' optional1 2
为此,我编写了以下函数:
function r=evalArguments(parser, arguments)
r = parser.Results;
for j=1:length(arguments)
argValue = r.(arguments{j});
if ischar(argValue)
r.(arguments{j}) = eval(argValue);
end
end
end
然后我可以在myfunc
中使用inputParser,像这样:
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;
由于我找不到现成的方法来做到这一点,所以我在这里发布了这个解决方案,并希望它也对其他人有用。
如果有更好的方法实现这个功能,请告诉我。