1

我有一个名为“int”的变量,其中包含大量数据。我想找到一种通过用户输入以编程方式重命名此变量的方法。因此,我可以查询有关数据的用户标识信息,例如响应为“AA1”,我想将变量“int”重命名为“AA1”或将“AA1”设为与 int 相同的变量。

使用输入命令会出现问题,因为它允许用户为已创建的变量赋值,而不是实际创建变量名。使用 eval 函数或它的变体会帮助我实现这一目标吗?或者有没有更简单的方法?

谢谢!

4

1 回答 1

2

仅作记录,int是一个相当糟糕的变量名选择。

除此之外,你可以做你想做的事情如下

sayfoo是保存用户输入的字符串的变量。您可以执行以下操作:

% eliminate leading/trailing whitespace
foo = strtrim(foo);
a = regexp('[a-zA-Z][a-zA-Z0-9_]*',foo));
if numel(a) == 0 
    fprintf('Sorry, %s is not a valid variable name in matlab\n', foo);
elseif a ~= 1
    fprintf('Sorry, %s is not a valid variable name in matlab\n', foo);
elseif 2 == exist(foo,'var')
    fprintf('Sorry, %s already in use as a variable name.');
else
    eval([foo,' = int']);
end

假设int(现在foo)是一个字段名为 的结构bar,您可以阅读 bar 如下:

barVal = eval([foo,'.bar']);

这一切都有些笨拙。

另一种不那么笨重的替代方法是使用关联数组,并让用户将各种 int 值存储在数组中。关联数组的 Matlab 方法是Maps。这将是我解决这个问题的首选方法。这是一个使用与上面相同的变量的示例。

nameValueMap = containers.Map;
nameValueMap(foo) = int;

以上创建了存储的名称foo与变量中的数据之间的关联int

要获取数据,您只需执行以下操作:

intValue = nameValueMap(foo);
于 2013-07-18T15:10:47.510 回答