Optional Arguments in Function as Struct Input

26 次查看(过去 30 天)
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)

采纳的回答

Steven Lord
Steven Lord 2025-1-14
Use the namedargs2cell function.
  3 个评论
Stephen23
Stephen23 2025-1-15
"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{:});

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile 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