Как я могу проверить, допустим ли дескриптор MATLAB?

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

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

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

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

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

9
задан gnovice 4 April 2017 в 21:06
поделиться

2 ответа

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

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

ОБНОВЛЕНИЕ:

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

if isvalid(h1)
  set(h1, 'Color', 'green');
end
13
ответ дан 4 December 2019 в 12:18
поделиться

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

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

try
   set(myHandle,propName,propValue);
catch
   % do something useful... (recreate the GUI?)
end
4
ответ дан 4 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: