如何将包含变量名称的字符串转换为可以引用的变量?

时间:2018-04-26 13:56:33

标签: string matlab initialization variable-names function-signature

我正在创建一个函数,该函数扫描文件中的某个函数,并确定哪些变量(都已初始化)用作函数的参数。目前,我能够为每个单独的变量派生一个包含字符串的单元格数组。 该计划采取这个:

x = DummyFunction(a, b, c);

并返回:

{'a'} {'b'} {'c'}

我试图将包含预先建立的变量的这些字符串转换为可以调用的变量。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您正在寻找的功能是matlab.lang.makeValidName(在R2014a中引入):

  

N = matlab.lang.makeValidName(S)从输入字符串N构造有效的MATLAB®标识符SmakeValidName函数不保证N中的字符串是唯一的。

     

有效的MATLAB标识符是字母数字(A-Z,a-z,0-9)和下划线的字符向量,这样第一个字符是一个字母,字符向量的长度小于或等于namelengthmax。

     在替换任何非字母数字或下划线的字符之前,

makeValidName会删除任何空白字符。如果空格字符后跟一个小写字母,makeValidName会将字母转换为相应的大写字符。

例如:

>> matlab.lang.makeValidName(["_privateField", "some name"])

的产率:

ans = 

  1×2 string array

    "x_privateField"    "someName"

我不确定它是否适用于您的用例,但您可能需要查看:Why Variables Should Not Be Named Dynamically (eval)

也许真正希望做的是检查是否存在具有某些名称的变量,然后相应地做一些事情 - 在这种情况下你可以使用exist函数:

tf = exist('varName','var')

例如:

if exist('a','var') && exist('b','var')
  res = someFunction(a,b);
else
  res = someFunction(default_a,default_b);
end

答案 1 :(得分:1)

尝试将变量存储在结构中并使用动态字段引用。这是一个例子:

variables.a = 1;
variables.b = 2;
variables.c = 3;

% scan your file here
% let's assume a and b are found in the file
variables_present = ['a', 'c'];

for i = 1:length(variables_present)
    % use dynamic field reference
    disp(variables.(variables_present(i)))
end

这将产生输出:

1
3

Follow this link有关如何使用动态字段引用的更多信息: