MATLAB 支持将属于实现的公共根类的子类的对象分组matlab.mixin.Heterogeneous
到单个数组中,该数组将具有最近的共同祖先的类,例如:
hObj = [ uifigure, uibutton, gobjects(1) ];
K>> class(hObj)
ans =
'matlab.graphics.Graphics'
我想编写一个函数来测试传入的未指定大小的句柄列表(通常是标量,但也可能是数组)是否属于特定的硬编码类或其后代。
如果输入是标量或齐次数组(即所有对象都具有相同的类),并且我们正在测试目标类本身(不包括子类),我们将从这样的函数中得到正确的结果:
function tf = isCorrectClass(hCandidate)
TARGET = 'matlab.ui.Figure';
tf = isa(hCandidate, TARGET);
end
hCandidate
但是,如果是异构数组,这将不起作用,因此我们必须这样做:
function tf = isCorrectClass(hCandidate)
TARGET = 'matlab.ui.Figure';
tf = arrayfun(@(x)isa(x, TARGET), hCandidate);
end
这是有效的,因为从异构数组中选择单个元素会使它们恢复到自己的特定类。
问题:如何使isCorrectClass
上面显示的函数适应目标类所在的以下层次结构Middle
(假设我的输入数组可能包含任何层次结构类的对象)?
% HierarchyRoot "implements" matlab.mixin.Heterogeneous
% / \
% Middle LeafD
% / | \
% LeafA LeafB LeafC