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)

 採用された回答

Steven Lord
Steven Lord 2025 年 1 月 14 日

0 投票

Use the namedargs2cell function.

3 件のコメント

Ingo Hermann
Ingo Hermann 2025 年 1 月 15 日
編集済み: Ingo Hermann 2025 年 1 月 15 日
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);
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{:});
Ingo Hermann
Ingo Hermann 2025 年 1 月 16 日

Thank you, that was what I was looking for!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeStartup and Shutdown についてさらに検索

製品

リリース

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by