假设我可以访问使用load
函数创建的结构:
structWithVariables = load('data.mat');
我想将此结构中的所有变量加载到工作空间中,但如果不对所有变量的名称进行硬编码,我无法找到任何方法。
注意:我无权访问.mat文件,也无法访问加载结构的代码,我实际上只有结构。
注意2:我想要这样做的原因只是使用一些引用变量的代码,就好像它们在工作区中一样。我不想改变代码。
是的。使用fieldnames
以编程方式获取变量名称,并使用assignin
将它们粘贴到工作区中。
function struct2vars(s)
%STRUCT2VARS Extract values from struct fields to workspace variables
names = fieldnames(s);
for i = 1:numel(names)
assignin('caller', names{i}, s.(names{i}));
end
将该函数称为struct2vars(structWithVariables)
,现在它们作为变量填充到您的工作区中。
虽然如果您可以访问要调用的代码,那么重写它以将变量作为函数参数而不是查看当前工作空间可能会更简洁。
这是使用cellfun
的oneliner:
myvar=structWithVariables; %for readability of code =)
cellfun(@(x,y) assignin('base',x,y),fieldnames(myvar),struct2cell(myvar));