MATLAB:有没有办法将变量从结构导入/提升到当前工作区


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);   % ????

关系,我想通了;这个辅助函数工作:

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

创建在运行时确定名称的变量的唯一方法是使用 evalevalinfevalassignin 这样的函数。 (顺便说一句,assignin是最不邪恶的选择,至少你不需要将你的值转换为字符串并返回。

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

您可以在FileExchange上使用出色的提交:

V2STRUCT - 将变量打包和解压缩到具有增强功能的结构中

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

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

它很笨拙,但实际上非常快,至少在SSD上是这样。

最新更新