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