MATLAB:如何动态访问变量

时间:2017-09-27 14:21:28

标签: matlab variables dynamic eval

我声明了一些包含简单行向量的变量,这些行向量表示另一个函数的输入参数。在循环中,应使用这些变量,并将结果分配给结构。

现在,我的问题是如何最好地访问预定义变量的内容。我找到了使用eval的解决方案。但是,我经常读到应该避免使用eval。显然,这不是最佳做法。那么,我的问题的最佳实践是什么?

varABC = [1,2,3];
varDEF = [4,5,6];
varGHI = [7,8,9];

names = {'ABC','DEF','GHI'};

result = {'result1','result2','result3'};

for i = 1 : 3
    varString = strcat('var',names{i});
    test.(result{i}) = sum(eval(varString));
end

1 个答案:

答案 0 :(得分:2)

我建议稍微重写一下代码

names = {'ABC','DEF','GHI'};
result = {'result1','result2','result3'};

选项1

% Use struct instead of a simple variable
var.ABC = [1,2,3];
var.DEF = [4,5,6];
var.GHI = [7,8,9];

for i = 1 : 3
    test.(result{i}) = sum(var.(names{i}));
end

选项2

% Use dictionary
c = containers.Map;
c('ABC') = [1,2,3];
c('DEF') = [4,5,6];
c('GHI') = [7,8,9];

for i = 1 : 3
    test.(result{i}) = sum(c(names{i}));
end