неопределенная переменная из ниоткуда



У меня есть приложение MALTAB с интерфейсом GUIDE, в функции OpeningFcn, которая выполняется до того, как GUI становится видимым, я определил такую глобальную переменную:



global P1;
P1 = [];


Тогда у меня есть функция таймера, выполняющаяся каждые 2 секунды, в самом начале этой функции:



handles=guidata(hObj);
global P1;


После этого функция двух строк производит некоторые вычисления, используя переменную P1. все работало нормально в течение нескольких часов, а затем внезапно мне пришло это сообщение:




??? Ошибка при оценка TimerFcn для таймера 'timer-1'



Неопределенная функция или переменная "P1".




И приложение остановилось. Я бы понял индекс вне диапазона ошибки или что-то подобное, но неопределенная переменная? Как такое вообще возможно?

515   1  

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

    Ничего не найдено.