Я выполняю рефакторинг существующего (рабочего) кода MATLAB, в частности извлекаю новый класс из фрагмента структурированного кода, который создает фигуру, и когда я это делаю, я получаю ошибку, вызванную осями фигура удаляется (моя переменная теперь говорит, что она содержит handle to deleted axes
).
Более подробно, текущая версия кода выглядит примерно так:
Overlay = figure
overlayAxes = subplot(1, 2, 1, 'Parent', Overlay)
... (other stuff)
imshow(... other parameters ..., overlayAxes)
(я упоминаю «другие вещи» и «другие параметры», чтобы пояснить, что строка imshow
не находится непосредственно над назначением overlayAxes
, на тот случай, если вы считаете, что мне нужно что-то искать, в частности, перед вызовом imshow
)
Это отлично работает. Мой рефакторинг состоит в том, чтобы переместить создание Overlay
в класс (другими словами, сделать его более «ООП-подобным»). В качестве первого шага я переместил его в класс, подобный этому:
classdef MyGUI < handle
properties(SetAccess = public)
Overlay
overlayAxes
end
methods
function obj = MyGUI()
obj.Overlay = figure;
obj.overlayAxes = subplot(1, 2, 1, 'Parent', obj.Overlay);
end
end
end
А потом я ссылался на этот новый класс, где Overlay
изначально был создан так:
GUI = MyGUI;
Overlay = GUI.Overlay;
overlayAxes = GUI.overlayAxes;
(Я сделал эти две переменные назначения, поэтому мне не пришлось менять остальную часть кода прямо сейчас - потому что он ссылается на Overlay
, а не GUI.Overlay
- в частности вызов imshow
)
Итак, когда я делаю это, звонок на imshow
перестает говорить:
Error using imshow>validateParent (line 375)
HAX must be a valid axes handle.
Как выясняется, когда я отлаживаю и проверяю overlayAxes
, он говорит, что содержит handle to deleted axes
.
Я читал несколько статей, объясняющих, что оси создаются при создании новых фигур и тому подобное, но я изменяю only , который я делаю, - это преобразование создания фигур из локальной переменной в свойство класса, поэтому я не чувствую, что что-то связано с побочными эффектами повторного вызова функций построения или чего-то подобного, но, может быть, что-то про передачу по ссылке, жизненный цикл объекта или что-то, чего я упускаю полностью, не совсем уверен.
Почему мои оси удаляются? Спасибо!