How to create function with name-value pair arguments?
298 次查看(过去 30 天)
显示 更早的评论
Hello. I want to create the function like
function [x1, x2] = fun('name',varargin,'name',[..],'name',[..])
How i can do it?
1 个评论
Simon Skillen
2024-3-26
编辑:Walter Roberson
2024-3-27
I'd use the function argument method as described in https://de.mathworks.com/help/matlab/matlab_prog/function-argument-validation-1.html
采纳的回答
Walter Roberson
2019-12-21
编辑:Walter Roberson
2019-12-21
Note: in R2019b and later, see the new arguments keyword
0 个评论
更多回答(3 个)
Christopher Rowley
2021-12-1
To provide some sample code on how to do this with data in a structure, here is an example. We are have two variables 'x' and 'z' that are stored in structure 'params', and a test function looks to compute x+z +5. I have a simple check that the name is type character, but you can add more, or tailor to your needs. The function would look like:
function y = testfunction( params, varargin)
% set up name-value pairs for varargin.
for i = 1:2:length(varargin) % work for a list of name-value pairs
if ischar(varargin{i}) % check if is character
params.(varargin{i}) = varargin{i+1}; % override or add parameters to structure.
end
end
y = params.z + params.x + 5;
And to try it, use:
params.x = 5;
params.z = 10;
testfunction( params) % try function
testfunction( params, 'x', 1) % try changing x from what it was set in the params structure.
In this example, the results should be 20, and 16, where the difference comes from the fact that x was decreased by 4 in the second function call.
0 个评论
Black Woods
2022-12-17
function db=name_value_pairs(varargin)
if isempty(varargin) || mod(length(varargin),2)==1
db={};
return
end
jj=1;
for ii=1:2:length(varargin)
if isa(varargin{ii},'char')
db{jj,1}=varargin{ii};db{jj,2}=varargin{ii+1};jj=jj+1;
else
db={};
return
end
end
0 个评论
Voss
2024-3-27
fcn('name','booey','professional_life','noine','personal_life',2,'tooth_size','XXXL')
fcn('name','Fred','home_planet','Mars','temper_quotient',Inf)
function fcn(varargin)
args = reshape(varargin,2,[]);
p = struct(args{:})
% do something with structure p
end
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!