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

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 可以重定向变量名称吗? IE。可以例如params.mat 中的变量 a 使用 someField.a 作为值存储,而不必先分配 a = someField.a

最佳答案

为什么不是这样的?

如果这是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')

关于matlab - 一次分配多个字段的巧妙方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5091284/

10-11 15:15