Instruction file imported from ta3map/EasyViewer (
.cursor/rules/matlab-globals.mdc). Copyright stays with the author.
MATLAB: global и persistent
Запрещено
- Никогда не добавлять
global ...илиpersistent ...во вложенные функции, локальные функции в том же файле, callback'и и методы внутри GUI-файлов. - Никогда не дублировать
globalдля переменной, уже объявленной в начале внешней функции файла. - Никогда не «чинить» доступ к global через
globalво вложенной функции — это ломает MATLAB с ошибкой про scope.
Обязательно
- Все
global/persistent— только в самом начале внешней (outermost) функции файла, одним блоком, до любого исполняемого кода. - Во вложенных функциях того же файла global-переменные используются без повторного
global(они уже объявлены снаружи). - Если нужен доступ к global из отдельного
.m-файла (не вложенная функция) —globalобъявляется в начале этой функции-файла.
Пример (signalViewerGUI и аналоги)
function myGui()
global ch_inxs channelEnabled % только здесь
function updateLocalCoefs()
ch_inxs = find(channelEnabled); % без global
end
end
При рефакторинге
Если global «не обновляется» — причина не в отсутствии global во вложенной функции. Проверить: объявление в outer function, порядок присваивания, не затеняется ли имя локальной переменной в другом scope.