Во время создания объектных массивов 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 присваивает значение двойных пустых (то есть, []
) к свойству.