Optional Arguments in Function as Struct Input

I have a Matlab function with many optional arguments which I want to call with these arguments recursively... This is just a short example, my real code is much more complexe and I don't want to share it here... I know that this function seems kind of nonesense.
function [out] = calculateHatches(vec, args)
arguments
vec
args.Limit = 0
args.Color = 'red'
args.Time = '12:00'
% (and many more argumnts)
end
% some calculations that give me out
out = []
if args.Limit==0
for i=1:10
nargs = args;
nargs.Limit = 1;
% n arguments might change here ...
% calculateHatches(vec,'Limit',nargs.Limit,'Color',nargs.Color,'Time',nargs.Time)
nout = calculateHatches(vec,nargs)
out = [out, nout]
end
end
end
However, this won't work, is there a way to makt it work?
calculateHatches(vec,nargs)
But I have too many optional arguments that change over time of programming too much, that I don't want to write it into the code. This would mean a lot of administration work.
calculateHatches(vec,'Limit',nargs.Limit,'Color',nargs.Color,'Time',nargs.Time)

 采纳的回答

Use the namedargs2cell function.

3 个评论

This function is splitting the arguments into cells, but I still cannot give it as input argument to calculateHatches like this. However, I can use eval to make it work somehow but this is not really nice ^^...
calculateHatches(vec,namedargs2cell(nargs))
Invalid argument at position 2. Function requires exactly 1 positional input(s).
% Fix using eval:
strVal = ['[out] = calculateHatches(vec'];
allArgs = namedargs2cell(nargs);
for i=1:2:size(allArgs,2)
strVal = [strVal,',"',char(allArgs{i}),'"',',allArgs{',char(num2str(i+1)),'}'];
end
strVal = [strVal,' );'];
eval(strVal);
"However, I can use eval to make it work somehow but this is not really nice ^^..."
EVAL is the opposite of nice. The MATLAB approach is to use a comma-separated list:
tmp = namedargs2cell(nargs);
out = calculateHatches(vec,tmp{:});

Thank you, that was what I was looking for!

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Startup and Shutdown 的更多信息

产品

版本

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by