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

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

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

Attempt to add variable to a static workspace. 

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

Тип операции

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

загрузка

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

eval, evalin или assignin

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

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

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

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

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

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

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

function noerror
X = [];
nestedfx

   function nestedfx
      makeX
   end
end

Похожие темы

Была ли эта тема полезной?