Я управляю данными по графику с помощью его дескриптора:
x = 1:10; y = sin(x);
h1 = line(x,y);
Однако, если число закрывается, прежде чем сценарий на самом деле завершается, делание чего-то вроде этого возвращает ошибку.
>>set(h1,'Color','green') % line is green
??? Error using ==> set
Invalid handle object.
Есть ли способ проверить если h1
допустимый дескриптор прежде, чем сделать какие-либо манипуляции с ним?
Вы можете использовать функцию ishandle
, чтобы сначала проверить, действителен ли графический дескриптор:
if ishandle(h1)
set(h1, 'Color', 'green');
end
ОБНОВЛЕНИЕ:
Для более новых В версиях MATLAB объекты-дескрипторы являются фактическими объектами, а не только числовыми значениями. Лучший вариант - использовать метод isvalid
для обработки объектов:
if isvalid(h1)
set(h1, 'Color', 'green');
end
Обратите внимание, что рукоятка ishandle имеет недостаток в том, что она также принимает общие числовые значения, такие как 0 (= рукоятка рабочего стола) и 1 (= первая открытая фигура по умолчанию), которые часто также являются действительными рукоятками, хотя, возможно, и не являются ожидаемой рукояткой . Тогда вы все равно увидите ошибку, если попытаетесь установить несуществующее свойство.
Для обработки таких случаев просто поместите свой код в блок обработки исключений:
try
set(myHandle,propName,propValue);
catch
% do something useful... (recreate the GUI?)
end