Как я могу преобразовать строку, которая содержит имя переменной, в переменную, на которую можно сослаться?
Я создаю функцию, которая сканирует файлы для определенной функции и определяет, какие переменные (все уже инициализированы) используются в качестве параметров для функции. В настоящее время я могу получить массив ячеек со строками для каждой отдельной переменной. Программа принимает это:
x = DummyFunction(a, b, c);
И возвращает это:
{'a'} {'b'} {'c'}
Я пытаюсь преобразовать эти строки, которые содержат предварительно установленные переменные, в переменные, которые могут быть вызваны. Какие-либо предложения?
2 ответа
Функция, которую вы ищете matlab.lang.makeValidName
(введено в R2014a):
N = matlab.lang.makeValidName(S)
создает действительные идентификаторы MATLAB®,N
из входных строк,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
Попробуйте сохранить ваши переменные в структуре и использовать динамические ссылки на поля. Вот пример:
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
Перейдите по этой ссылке для получения дополнительной информации о том, как использовать динамические ссылки на поля: