一次分配多个字段的聪明方法?

时间:2011-02-23 13:03:30

标签: matlab loops struct wrapper

由于遗留函数调用,我有时会被迫编写像这样的丑陋包装器

function return = someWrapper(someField)

a = someField.a;
b = someField.b;
% and so on, realistically it's more like ten variables that
% could actually be grouped in a struct

save('params.mat', 'a', 'b'); %etc.

% then, on another machine, a function loads params.mat, does the calculations
% and saves the result in result.mat containing the variables c,d,...

load('result.mat', 'c', 'd');
return.c = c;
return.d = d;
% again, it's more than just two return values

所以基本的想法是创建与someField的字段名相同的变量,运行一个函数并使用return的返回变量的名称作为字段名创建一个someFunction结构

是否有某种方法可以使用某些循环来简化超过fieldnames(someField)


或者我应该使用一些不同的方法?由于使用someFieldresult进行了一些进一步的处理,我想继续使用结构,但也许第二个问题是

可以saveload重定向变量名称吗?即可以例如params.mat中的变量a是使用someField.a作为值存储的,而不是必须先分配a = someField.a

3 个答案:

答案 0 :(得分:6)

为什么不是这样的?

如果是s:

s.a=1
s.b=2
s.c=3

然后,此命令创建一个名为“arguments”的matfile,其变量为a,b,c:

save arguments.mat -struct s

此命令将matfiles变量加载到结构

r = load('arguments.mat')

答案 1 :(得分:2)

如何使用ASSIGNINdynamic fieldnames遍历结构字段并在工作区中创建适当的变量:

function struct2base(s)

for f = fieldnames(s)'
   assignin('base', f{:}, s.(f{:}))
end

答案 2 :(得分:1)

查看deal()功能。