Переменные во вложенных и анонимных функциях

Правила определения областей видимости для вложенных и анонимных функций требуют, чтобы все переменные, используемые в функции, присутствовали в тексте кода.

При попытке динамически добавить переменную в рабочую область анонимной функции, вложенной функции или функции, которая содержит вложенную функцию, то MATLAB® выдает ошибку формы

Attempt to add variable to a static workspace. 

Эта таблица описывает типичные операции, которые делают попытку динамического присвоения и рекомендуемых способов избежать его.

Тип операции

Лучшая практика избежать динамического присвоения

load

Задайте имя переменной как вход к load функция. Или, присвойте выход от load функционируйте к массиву структур.

evalevalin, или assignin

Если возможно, избегайте использования этих функций в целом. См. Альтернативные варианты функции eval.

Вызов скрипта MATLAB, который создает переменную

Преобразуйте скрипт в функцию и передайте переменные как аргументы. Этот подход также делает код понятным.

Присвоение переменной в отладчике MATLAB

Присвойте переменную в базовое рабочее пространство, такой как

K>> assignin('base','X',myvalue)

Другой способ избежать динамического присвоения состоит в том, чтобы явным образом объявить переменную в функции. Например, предположите скрипт под названием makeX.m присваивает значение переменной X. Функция, которая вызывает makeX и явным образом объявляет X избегает динамической ошибки присвоения потому что X находится в функциональной рабочей области. Распространенный способ объявить переменную состоит в том, чтобы инициализировать свое значение как пустой массив:

function noerror
X = [];
nestedfx

   function nestedfx
      makeX
   end
end

Похожие темы