matlab:有没有办法将变量从结构导入/提升到当前工作空间?

时间:2012-03-12 15:10:28

标签: matlab workspace

function y = myfunc(param)
C = param.C;
L = param.L;
Kp = param.Kp;
Ki = param.Ki;
...

有没有办法概括上面的代码?我知道如何使用fieldnames()getfield()来概括结构访问,但不知道如何在不调用eval()(这是邪恶的)的情况下设置变量。

for n = fieldnames(param)'
  name = n{1};
  value = param.(name);
  do_something_with(name,value);   % ????

4 个答案:

答案 0 :(得分:5)

没关系,我明白了;这个辅助函数有效:

function vars_pull(s)
    for n = fieldnames(s)'
        name = n{1};
        value = s.(name);
        assignin('caller',name,value);
    end

答案 1 :(得分:2)

创建名称在运行时确定的变量的唯一方法是使用evalevalinfevalassignin等函数。 (assignin是最不邪恶的选择BTW,至少你不需要将你的值转换成字符串然后回来。)

但是,我问你为什么要这样做,为什么不在你需要时通过输入结构访问值。如果你想保存打字(从经验来讲,因为我非常懒惰),我通常将我的输入参数结构命名为简短,如p。在我的代码中,我只是直接访问字段(例如p.Kp,过了一段时间我甚至都看不到p.。)这也使得将结构传递给子函数变得容易需要的。

答案 2 :(得分:1)

您可以使用FileExchange上的优秀提交:

V2STRUCT - Pack&将变量解压缩到&来自具有增强功能的结构

答案 3 :(得分:0)

这是一种解决方法:使用'-struct'选项将结构保存到.mat文件,然后立即重新加载。这是结构变量X的一个例子:

save('deleteme.mat','-struct','X');
load('deleteme.mat');
delete('deleteme.mat');

它的kludgey,但实际上非常快,至少在SSD上。