How to create function with name-value pair arguments?

354 visualizaciones (últimos 30 días)
Pavel M
Pavel M el 21 de Dic. de 2019
Respondida: Voss el 27 de Mzo. de 2024
Hello. I want to create the function like
function [x1, x2] = fun('name',varargin,'name',[..],'name',[..])
How i can do it?

Respuesta aceptada

Walter Roberson
Walter Roberson el 21 de Dic. de 2019
Editada: Walter Roberson el 21 de Dic. de 2019

Más respuestas (3)

Christopher Rowley
Christopher Rowley el 1 de Dic. de 2021
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.

Black Woods
Black Woods el 17 de Dic. de 2022
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

Voss
Voss el 27 de Mzo. de 2024
fcn('name','booey','professional_life','noine','personal_life',2,'tooth_size','XXXL')
p = struct with fields:
name: 'booey' professional_life: 'noine' personal_life: 2 tooth_size: 'XXXL'
fcn('name','Fred','home_planet','Mars','temper_quotient',Inf)
p = struct with fields:
name: 'Fred' home_planet: 'Mars' temper_quotient: Inf
function fcn(varargin)
args = reshape(varargin,2,[]);
p = struct(args{:})
% do something with structure p
end

Categorías

Más información sobre Startup and Shutdown en Help Center y File Exchange.

Productos


Versión

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by