Как я могу преобразовать строку, которая содержит имя переменной, в переменную, на которую можно сослаться?

Я создаю функцию, которая сканирует файлы для определенной функции и определяет, какие переменные (все уже инициализированы) используются в качестве параметров для функции. В настоящее время я могу получить массив ячеек со строками для каждой отдельной переменной. Программа принимает это:

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

Перейдите по этой ссылке для получения дополнительной информации о том, как использовать динамические ссылки на поля:

Другие вопросы по тегам