Arguments function: Name-value arguments in default values
30 次查看(过去 30 天)
显示 更早的评论
I am currently using Matlabs argument validation functionality (arguments) to validation an input struct (via conversion to name-value pair). I was wondering if there is any way to set the default value for name-argument pair as the value from a different name-value pair as below. Ideally this would set the default value of <>.B to be equal to <>.A if the value is not provided.
function my_func(nameValueInputStruct)
arguments
nameValueInputStruct.A double = 1
nameValueInputStruct.B double = nameValueInputStruct.A
end
...
end
Matlab throws the error when I try to do this, but was hoping that there is an available work-around. It is important that the input is a name-value pair struct. Thank you.
Use of name-value arguments in default values is not supported.
0 个评论
回答(2 个)
Markus Leuthold
2023-2-13
Same with this code, which I expect to work, but it fails with the same error message
arguments
opts.A = mustBeMember(opts.A, ["x" "y"])
end
0 个评论
Shivam Malviya
2023-3-7
Hi Austin,
I see that you are interested in utilizing the "A" name-value pair argument to assign a default value for the "B" name-value pair argument inside the function argument validation block. However, I regret to inform you that this feature is currently unsupported.
To work around this issue, please note that if a value is not provided for a specific name-value pair argument, it will not appear as a field in the name-value pair argument variable. With this in mind, I have created a function which is attached below for your reference and to help you understand this concept better.
function my_func(nameValueInputStruct)
% Argument validation
arguments
nameValueInputStruct.A double = 1
nameValueInputStruct.B double
end
% Call a helper function to parse the input struct
parseNameValueInputStruct(nameValueInputStruct)
end
function parseNameValueInputStruct(nameValueInputStruct)
%parseNameValueInputStruct Parse the nameValueInputStruct and modify it
% accordingly
% If value for argument "B" is not provided
if ~isfield(nameValueInputStruct, "B")
% Set the value of "B" equal to the value of "A"
nameValueInputStruct.B = nameValueInputStruct.A;
end
end
Please refer to the following links for a better understanding;
- https://in.mathworks.com/help/matlab/ref/isfield.html
- https://in.mathworks.com/help/matlab/ref/arguments.html
Best regards,
Shivam Malviya
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Argument Definitions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!