неопределенная переменная из ниоткуда
У меня есть приложение MALTAB с интерфейсом GUIDE, в функции OpeningFcn, которая выполняется до того, как GUI становится видимым, я определил такую глобальную переменную:
global P1;
P1 = [];
Тогда у меня есть функция таймера, выполняющаяся каждые 2 секунды, в самом начале этой функции:
handles=guidata(hObj);
global P1;
После этого функция двух строк производит некоторые вычисления, используя переменную P1. все работало нормально в течение нескольких часов, а затем внезапно мне пришло это сообщение:
??? Ошибка при оценка TimerFcn для таймера 'timer-1'
Неопределенная функция или переменная "P1".
И приложение остановилось. Я бы понял индекс вне диапазона ошибки или что-то подобное, но неопределенная переменная? Как такое вообще возможно?
1 ответ:
В соответствии с документацией для
global:Чтобы использовать глобальное в обратном вызове, объявите глобальное, используйте его, а затем очистите глобальную ссылку от рабочей области. Это позволяет избежать объявления глобального после ссылки на него. Например,
cbstr = sprintf('%s, %s, %s, %s, %s', ... 'global MY_GLOBAL', ... 'MY_GLOBAL = 100', ... 'disp(MY_GLOBAL)', ... 'MY_GLOBAL = MY_GLOBAL+1', ... 'clear MY_GLOBAL'); uicontrol('style', 'pushbutton', 'CallBack', cbstr, ... 'string', 'count')При этом, как правило, нет никогда необходимости использовать переменную
global. Для GUI, построенных с помощью направляющей, рассмотрите возможность использованияsetappdataдля доступа к переменным через функции.
Comments