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)

 Respuesta aceptada

Steven Lord
Steven Lord el 14 de En. de 2025

0 votos

Use the namedargs2cell function.

3 comentarios

Ingo Hermann
Ingo Hermann el 15 de En. de 2025
Editada: Ingo Hermann el 15 de En. de 2025
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{:});
Ingo Hermann
Ingo Hermann el 16 de En. de 2025

Thank you, that was what I was looking for!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Startup and Shutdown en Centro de ayuda y File Exchange.

Productos

Versión

R2023a

Preguntada:

el 14 de En. de 2025

Comentada:

el 16 de En. de 2025

Community Treasure Hunt

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

Start Hunting!

Translated by