0

我正在创建一个函数,它扫描文件中的某个函数并确定哪些变量(所有变量都已初始化)用作函数的参数。目前,我能够为每个单独的变量派生一个带有字符串的单元格数组。该程序采用以下方法:

x = DummyFunction(a, b, c);

并返回:

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

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

4

2 回答 2

3

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

N = matlab.lang.makeValidName(S)N从输入字符串中构造有效的 MATLAB® 标识符, S。该makeValidName函数不保证其中的字符串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"

我不确定它是否适用于您的用例,但您可能想看看:为什么不应该动态命名变量 ( 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
于 2018-04-26T14:23:40.127 回答
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

请点击此链接以获取有关如何使用动态字段引用的更多信息:

于 2018-04-26T14:56:31.107 回答