我有一个名为“int”的变量,其中包含大量数据。我想找到一种通过用户输入以编程方式重命名此变量的方法。因此,我可以查询有关数据的用户标识信息,例如响应为“AA1”,我想将变量“int”重命名为“AA1”或将“AA1”设为与 int 相同的变量。
使用输入命令会出现问题,因为它允许用户为已创建的变量赋值,而不是实际创建变量名。使用 eval 函数或它的变体会帮助我实现这一目标吗?或者有没有更简单的方法?
谢谢!
我有一个名为“int”的变量,其中包含大量数据。我想找到一种通过用户输入以编程方式重命名此变量的方法。因此,我可以查询有关数据的用户标识信息,例如响应为“AA1”,我想将变量“int”重命名为“AA1”或将“AA1”设为与 int 相同的变量。
使用输入命令会出现问题,因为它允许用户为已创建的变量赋值,而不是实际创建变量名。使用 eval 函数或它的变体会帮助我实现这一目标吗?或者有没有更简单的方法?
谢谢!
仅作记录,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);