Назначение динамической переменной с использованием eval в Matlab R2013a

Я пытаюсь присвоить значения динамической переменной, используя eval в Matlab. Я использую Matlab R2013a. Я могу легко сделать это в более старых версиях, но не в R2013a. Да, я знаю о подводных камнях использования eval и т. д. Я также пробовал assignin, но это не увенчалось успехом.

Bins = [10 100 20]; 
Cols = numel(Bins);

for i = 1:Cols 
    eval(['Var' num2str(i) ' = Cols+i']);
end

Ошибка --> Попытка добавить "Var" в статическое рабочее пространство.

Желаемый результат

    Var1 = 4 
    Var2 = 5
    Var3 = 6

person Maddy    schedule 31.10.2013    source источник
comment
Хорошо, вы знаете о подводных камнях использования eval. Так почему бы вам не написать это как массив? Var(i) = Cols+i;   -  person Peter    schedule 31.10.2013


Ответы (1)


Этот код внутри вложенной функции? См. эту статью от MathWorks.

Если вы должны создавать переменные таким образом (есть гораздо лучшие варианты), вам нужно будет сделать это в основной функции или использовать подфункцию. См. эту статью о совместном использовании данных между рабочими пространствами. сведения о различных типах функций и способах их использования.

person horchler    schedule 31.10.2013
comment
Нет. Это не внутри вложенной функции. - person Maddy; 31.10.2013
comment
@Maddy: Что ж, согласно первому URL-адресу, вы используете анонимную функцию или функцию, содержащую вложенную функцию для оценки кода? Или, возможно, файл classdef? Как вы вызываете код? - person horchler; 31.10.2013
comment
-› Я использую его внутри функции. Да, у этой функции есть еще одна вложенная функция через много строк после строки, в которой размещен этот код оценки. Ты прав. Теперь я могу сказать, почему это произошло. Я придумаю обходной путь. Спасибо. - person Maddy; 31.10.2013
comment
@Maddy: Да, это звучит как функция, содержащая вложенную функцию. Вложенной функции не нужно вызывать сам код динамического присваивания. Если вы можете преобразовать эту вложенную функцию в подфункцию (удалить ends), то, скорее всего, это сработает. - person horchler; 31.10.2013
comment
Спасибо. Я не смогу этого сделать. Вложенная функция используется через дескриптор функции, который используется в операторе accumarray, который дополнительно изменяет локальную переменную. У меня есть обходной путь. Очень интересное исключение, вызванное вложенной функцией! - person Maddy; 31.10.2013