Как я могу проверить, действительно ли дескриптор MATLAB? - PullRequest
9 голосов
/ 24 декабря 2009

Я манипулирую данными на графике, используя его дескриптор:

x = 1:10; y = sin(x);
h1 = line(x,y);

Однако, если фигура закрывается до фактического завершения сценария, выполнение чего-либо подобного возвращает ошибку.

>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.

Есть ли способ проверить, является ли h1 допустимым дескриптором, прежде чем делать какие-либо манипуляции с ним?

Ответы [ 2 ]

13 голосов
/ 24 декабря 2009

Вы можете использовать функцию ishandle, чтобы сначала проверить правильность графического дескриптора:

if ishandle(h1)
  set(h1, 'Color', 'green');
end

UPDATE:

Для более новых версий MATLAB объекты-дескрипторы являются реальными объектами, а не просто числовыми значениями. Лучшим вариантом является использование метода isvalid для объектов дескриптора:

if isvalid(h1)
  set(h1, 'Color', 'green');
end
4 голосов
/ 24 декабря 2009

Обратите внимание, что ishandle имеет недостаток в том, что он также принимает общие числовые значения, такие как 0 (= дескриптор рабочего стола) и 1 (= первый открытый рисунок по умолчанию), которые часто также являются допустимыми дескрипторами, хотя, возможно, и не ожидаемый ручка. Тогда вы все равно увидите ошибку, если попытаетесь установить несуществующее свойство.

Для обработки таких случаев просто поместите свой код в блок обработки исключений:

try
   set(myHandle,propName,propValue);
catch
   % do something useful... (recreate the GUI?)
end
...