How to pass a struct as name-value-pairs to a function?

68 visualizaciones (últimos 30 días)
Pontus Vikstål
Pontus Vikstål el 1 de Jul. de 2019
Comentada: Markus Leuthold el 10 de Mayo de 2022
Is it possible to convert a struct to name-value-pairs that is then fed to a function that takes Name-Value pairs as input arguments? The fieldname of the struct would represent the Name and and the fieldvalue the Value of the Name-Value pairs.
One particular function that use Name-Value pairs as input is the GlobalSearch function in MATLAB.
gs = GlobalSearch(Name,Value,...)
For example is the following possible
% I want this
gs = GlobalSearch('BasinRadiusFactor',.5,'NumTrialPoints',400)
% To be equal to this
options.BasinRadiusFactor = 0.5
options.NumTrialPoints = 400
gs = GlobalSearch(options)

Respuesta aceptada

Matt J
Matt J el 1 de Jul. de 2019
Editada: Matt J el 1 de Jul. de 2019
Some functions may enable this (in particular, those that use inputParser to parse string-value pairs will always accept a struct), but clearly not all functions, as you found out when you ran your example. However, you can always pre-convert a struct to a cell of string value pairs using the utility below.
function C=struct2pairs(S)
%Turns a scalar struct S into a cell of string-value pairs C
%
% C=struct2pairs(S)
%
%If S is a cell already, it will be returned unchanged.
if iscell(S)
C=S; return
elseif length(S)>1
error 'Input must be a scalar struct or cell';
end
C=[fieldnames(S).'; struct2cell(S).'];
C=C(:).';

Más respuestas (1)

Hyeokjin Jho
Hyeokjin Jho el 30 de Mzo. de 2021
  3 comentarios
Matt J
Matt J el 25 de Abr. de 2022
Yes, perhaps an attribute syntax:
function myfunction(options)
arguments(StructExpand=true)
end
end
Markus Leuthold
Markus Leuthold el 10 de Mayo de 2022
Matt, sounds like a good idea!

Iniciar sesión para comentar.

Categorías

Más información sobre Data Type Conversion en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by