Правила определения областей видимости для вложенных и анонимных функций требуют, чтобы все переменные, используемые в функции, присутствовали в тексте кода.
При попытке динамически добавить переменную в рабочую область анонимной функции, вложенной функции или функции, которая содержит вложенную функцию, то MATLAB® выдает ошибку формы
Attempt to add variable to a static workspace.
Эта таблица описывает типичные операции, которые делают попытку динамического присвоения и рекомендуемых способов избежать его.
Тип операции | Лучшая практика избежать динамического присвоения |
---|---|
| Задайте имя переменной как вход к функции |
| Если возможно, избегайте использования этих функций в целом. См. Альтернативные варианты функции eval. |
Вызов скрипта MATLAB, который создает переменную | Преобразуйте скрипт в функцию и передайте переменные как аргументы. Этот подход также делает код понятным. |
Присвоение переменной в отладчике MATLAB | Присвойте переменную в базовое рабочее пространство, такой как K>> assignin('base','X',myvalue) |
Другой способ избежать динамического присвоения состоит в том, чтобы явным образом объявить переменную в функции. Например, предположите, что скрипт под названием makeX.m
присваивает значение переменной X
. Функция, которая вызывает makeX
и явным образом объявляет X
, избегает динамической ошибки присвоения, потому что X
находится в функциональной рабочей области. Распространенный способ объявить переменную состоит в том, чтобы инициализировать свое значение как пустой массив:
function noerror X = []; nestedfx function nestedfx makeX end end