Во время создания объектных массивов, 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: 7
MATLAB создал объекты, содержащиеся в элементах a(1,1:6)
без входного параметра. Значение по умолчанию для свойств пусто []
. Для примера:
a(1,1)
ans = SimpleValue with properties: Value: []
MATLAB вызывает SimpleValue
конструктор один раз и копирует возвращенный объект в каждый элемент массива.
Когда MATLAB вызывает конструктор без аргументов для инициализации объектного массива, происходит одно из следующих назначений:
Если определения свойств задают значения по умолчанию, MATLAB присваивает эти значения.
Если конструктор присваивает значения в отсутствие входных параметров, MATLAB присваивает эти значения.
Если ни одна из предыдущих ситуаций не применяется, MATLAB присваивает значение пустого double (то есть []
) к свойству.