필터 지우기
필터 지우기

How to create function with name-value pair arguments?

조회 수: 340 (최근 30일)
Pavel M
Pavel M 2019년 12월 21일
답변: Voss 2024년 3월 27일
Hello. I want to create the function like
function [x1, x2] = fun('name',varargin,'name',[..],'name',[..])
How i can do it?

채택된 답변

Walter Roberson
Walter Roberson 2019년 12월 21일
편집: Walter Roberson 2019년 12월 21일

추가 답변 (3개)

Christopher Rowley
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.

Black Woods
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

Voss
Voss 2024년 3월 27일
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

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

제품


릴리스

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by