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
创建在运行时确定名称的变量的唯一方法是使用 eval
、evalin
、feval
或 assignin
这样的函数。 (顺便说一句,assignin
是最不邪恶的选择,至少你不需要将你的值转换为字符串并返回。
但是,我质疑你为什么要这样做,为什么不在需要时通过输入结构访问值。 如果你想保存打字(从经验上讲,因为我非常懒(,我通常会将我的输入参数结构命名为简短的名称,例如 p
。 在我的整个代码中,我只是直接访问字段,(例如 p.Kp
,过了一会儿,我什至看不到p.
了。 这也使得根据需要将结构传递到子函数中变得容易。
您可以在FileExchange上使用出色的提交:
V2STRUCT - 将变量打包和解压缩到具有增强功能的结构中
解决方法如下:使用 '-struct'
选项将结构保存到 .mat 文件,然后立即重新加载。 下面是结构变量 X
的示例:
save('deleteme.mat','-struct','X');
load('deleteme.mat');
delete('deleteme.mat');
它很笨拙,但实际上非常快,至少在SSD上是这样。