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); % ????
答案 0 :(得分:5)
function vars_pull(s)
for n = fieldnames(s)'
name = n{1};
value = s.(name);
assignin('caller',name,value);
end
答案 1 :(得分:2)
创建名称在运行时确定的变量的唯一方法是使用eval
,evalin
,feval
或assignin
等函数。 (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上。