由于遗留函数调用,我有时会被迫编写像这样的丑陋包装器
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)
?
或者我应该使用一些不同的方法?由于使用someField
和result
进行了一些进一步的处理,我想继续使用结构,但也许第二个问题是
可以save
和load
重定向变量名称吗?即可以例如params.mat中的变量a
是使用someField.a
作为值存储的,而不是必须先分配a = someField.a
?
答案 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)
如何使用ASSIGNIN和dynamic fieldnames遍历结构字段并在工作区中创建适当的变量:
function struct2base(s) for f = fieldnames(s)' assignin('base', f{:}, s.(f{:})) end
答案 2 :(得分:1)
查看deal()功能。