Прежде всего, вы можете проверить наше состояние с помощью
validParam = isa(x,'Foo') || isempty(x);
Однако лучшим способом будет создание пустого класса с использованием статического метода empty
:
e = Foo.empty(0);
isa(x,'Foo')
И результат:
isa (Foo.empty (0), 'Foo')
ans =
1
ПоКстати, это также полезно для другого случая - предположим, что вы хотите динамически расти и массив Foo
объектов.Вы можете использовать массив ячеек, но тогда вы потеряете безопасность типов.Вместо этого создайте Foo.empty()
.
Тем не менее, есть недостаток в использовании этого метода.Он не достаточно умен, чтобы обрабатывать наследование -
Пусть Bar
будет классом, который наследует от Foo
.
classdef Bar < Foo
end
И вы выделяете новый массив из Foo
объектов:
x = Foo.empty(0)
x =
0x0 пустой Foo без свойств.
Методы
Затем попробуйте добавить Bar
:
x(end+1) = Bar()
???При преобразовании из Bar в Foo произошла следующая ошибка: Ошибка с использованием ==> Foo Слишком много входных аргументов.
Таким образом, единственное обходное решение для этого случая - использовать массив ячеек.1049 * Edit (1): Похоже, что Matlab добавил специальный класс для обработки наследования:
Описание
matlab.mixin.Heterogene - абстрактный класс, обеспечивающий поддержку формирования гетерогенных массивов.Гетерогенный массив - это массив объектов, которые отличаются по своему определенному классу, но все они являются производными от корневого класса или являются его экземплярами.Корневой класс является производным от matlab.mixin.Heterogene.