Во время создания объектных массивов, MATLAB® может вызвать конструктор классов без аргументов, даже если конструктор не создает объектный массив. Например, предположим, что вы задаете следующий класс:
classdef SimpleValue properties Value end methods function obj = SimpleValue(v) obj.Value = v; end end end
Выполните следующий оператора для создания массива:
a(1,7) = SimpleValue(7)
Error using SimpleValue (line 7)
Not enough input arguments.Эта ошибка возникает из-за того, что MATLAB вызывает конструктор без аргументов, чтобы инициализировать элементы 1 через 6 в массиве.
Ваш класс должен поддерживать синтаксис конструктора без входных параметров. Простое решение - это тестирование nargin и пусть случай, когда nargin == 0 не выполнять код, но не ошибку:
classdef SimpleValue properties Value end methods function obj = SimpleValue(v) if nargin > 0 obj.Value = v; end end end end
Используя пересмотренное определение класса, предыдущий оператор назначения массива выполняется без ошибок:
a(1,7) = SimpleValue(7)
a =
1x7 SimpleValue array with properties:
ValueОбъект, назначенный элементу массива a(1,7) использует входной параметр, переданный конструктору, как значение, присвоенное свойству:
a(1,7)
ans =
SimpleValue with properties:
Value: 7MATLAB создал объекты, содержащиеся в элементах a(1,1:6) без входного параметра. Значение по умолчанию для свойств пусто []. Для примера:
a(1,1)
ans =
SimpleValue with properties:
Value: []MATLAB вызывает SimpleValue конструктор один раз и копирует возвращенный объект в каждый элемент массива.
Когда MATLAB вызывает конструктор без аргументов для инициализации объектного массива, происходит одно из следующих назначений:
Если определения свойств задают значения по умолчанию, MATLAB присваивает эти значения.
Если конструктор присваивает значения в отсутствие входных параметров, MATLAB присваивает эти значения.
Если ни одна из предыдущих ситуаций не применяется, MATLAB присваивает значение пустого double (то есть []) к свойству.