我正在创建一个函数,该函数扫描文件中的某个函数,并确定哪些变量(都已初始化)用作函数的参数。目前,我能够为每个单独的变量派生一个包含字符串的单元格数组。 该计划采取这个:
x = DummyFunction(a, b, c);
并返回:
{'a'} {'b'} {'c'}
我试图将包含预先建立的变量的这些字符串转换为可以调用的变量。有什么建议吗?
答案 0 :(得分: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"
我不确定它是否适用于您的用例,但您可能需要查看: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有关如何使用动态字段引用的更多信息: