exponenta event banner

Функции проверки свойств

Функции проверки MATLAB

MATLAB ® определяет функции для использования при проверке свойств. Эти функции поддерживают общие шаблоны использования для проверки и предоставляют описательные сообщения об ошибках. Следующие таблицы классифицируют функции проверки MATLAB и описывают их использование.

Атрибуты числовых значений

Имя

Значение

Функции, вызываемые на входах

mustBePositive(value)

value > 0

gt, isreal, isnumeric, islogical

mustBeNonpositive(value)

value <= 0

ge, isreal, isnumeric, islogical

mustBeNonnegative(value)

value >= 0

ge, isreal, isnumeric, islogical

mustBeNegative(value)

value < 0

lt, isreal, isnumeric, islogical

mustBeFinite(value)

value не имеет NaN и нет Inf элементы.

isfinite

mustBeNonNan(value)

value не имеет NaN элементы.

isnan

mustBeNonzero(value)

value ~= 0

eq, isnumeric, islogical

mustBeNonsparse(value)

value не имеет разреженных элементов.

issparse

mustBeReal(value)

value не имеет мнимой части.

isreal

mustBeInteger(value)

value == floor(value)

isreal, isfinite, floor, isnumeric, islogical

mustBeNonmissing(value)

value не может содержать отсутствующие значения.

ismissing

Сравнение с другими значениями

Имя

Значение

Функции, вызываемые на входах

mustBeGreaterThan(value,c)

value > c

gt, isscalar, isreal, isnumeric, islogical

mustBeLessThan(value,c)

value < c

lt, isreal, isnumeric, islogical

mustBeGreaterThanOrEqual(value,c)

value >= c

ge, isreal, isnumeric, islogical

mustBeLessThanOrEqual(value,c)

value <= c

le, isreal, isnumeric, islogical

Типы данных

Имя

Значение

Функции, вызываемые на входах

mustBeA(value,classnames)

value должен иметь определенный класс.

Использует отношения определения класса

mustBeNumeric(value)

value должен быть числовым.

isnumeric

mustBeNumericOrLogical(value)

value должен быть числовым или логическим.

isnumeric, islogical

mustBeFloat(value)

value должен быть массивом с плавающей запятой.

isfloat

mustBeUnderlyingType(value,typename)

value должен иметь указанный базовый тип.

isUnderlyingType

Размер

Имя

Значение

Функции, вызываемые на входах

mustBeNonempty(value)

value не пуст.

isempty

mustBeScalarOrEmpty(value)value должен быть скаляром или пустым.

isscalar, isempty

mustBeVector(value)value должен быть вектором.

isvector

Членство и диапазон

Имя

Значение

Функции, вызываемые на входах

mustBeMember(value,S)

value является точным совпадением для члена S.

ismember

mustBeInRange(value,lower,upper,boundflags)value должно находиться в пределах диапазона.

gt, ge, lt, le

Текст

Имя

Значение

Функции, вызываемые на входах

mustBeFile(path)

path должен ссылаться на файл.

isfile

mustBeFolder(folder)path должен ссылаться на папку.

isfolder

mustBeNonzeroLengthText(value)

value должен быть фрагментом текста с ненулевой длиной.

Неприменимо

mustBeText(value)

value должен быть строковым массивом, символьным вектором или массивом ячеек символьных векторов.

Неприменимо

mustBeTextScalar(value)

value должен быть одним фрагментом текста.

Неприменимо
mustBeValidVariableName(varname)varname должно быть допустимым именем переменной.

isvarname

Проверка свойства с помощью функций

Используйте функции проверки свойств в определениях классов для наложения определенных ограничений на значения свойств. Функция проверки принимает значение потенциального свойства в качестве аргумента и выдает ошибку, если значение не соответствует конкретному требованию, предъявляемому функцией.

В процессе проверки MATLAB передает значение каждой функции проверки, указанной в определении класса. MATLAB вызывает каждую функцию слева направо и выдает первую обнаруженную ошибку. Значение, переданное функциям проверки, является результатом любого преобразования, применяемого спецификациями класса и размера. Дополнительные сведения о проверке класса и размера см. в разделе Проверка класса и размера свойства.

Список функций проверки MATLAB см. в разделе Функции проверки MATLAB.

Синтаксис функции проверки

Укажите функции проверки как разделенный запятыми список имен функций или вызовов функций с аргументами, заключенными в фигурные скобки.

classdef MyClass
   properties
      Prop {fcn1,fcn2,...} = defaultValue
   end
end

MATLAB неявно передает значение потенциального свойства функции проверки. Однако если для функции проверки требуются входные аргументы в дополнение к значению потенциального свойства, необходимо включить и свойство, и дополнительные аргументы. Дополнительные аргументы должны быть литеральными значениями и не могут ссылаться на переменные. Литеральные значения являются несимвольными представлениями, такими как числа и текст.

Например, рассмотрим функцию mustBeGreaterThan. Для него требуется ограничивающее значение в качестве входного параметра. Для этой функции проверки необходимо, чтобы значение свойства было больше этого ограничивающего значения.

Передайте свойство в качестве первого аргумента. Используйте имя свойства, но не заключите его в кавычки. Это определение свойства ограничивает Prop до значений, превышающих 10.

properties
   Prop {mustBeGreaterThan(Prop,10)}
end

Использование функций проверки

Следующий класс определяет функции проверки для каждого свойства.

  • Data должен быть числовым и конечным.

  • Interp должен быть одним из трех перечисленных вариантов. Укажите значение по умолчанию для этого свойства, чтобы удовлетворить этому требованию.

classdef ValidatorFunction
   properties
      Data {mustBeNumeric, mustBeFinite}
      Interp {mustBeMember(Interp,{'linear','cubic','spline'})} = 'linear'
   end
end

При создании объекта класса по умолчанию отображаются начальные значения.

a = ValidatorFunction
a = 

  ValidatorFunction with properties:

      Data: []
    Interp: 'linear'

Назначение значений свойствам вызывает функции проверки.

a.Data = 'cubic'
Error setting property 'Data' of class 'ValidatorFunction':
Value must be numeric.

Потому что Data проверка свойства не включает числовой класс, преобразование отсутствует char вектор к числовому значению. При изменении проверки Data для указания класса как double, MATLAB преобразует char вектор в double массив.

properties
   Data double {mustBeNumeric, mustBeFinite}
end

Присвоение char вектор не приводит к ошибке, поскольку MATLAB преобразует char вектор в класс double.

a.Data = 'cubic'
a = 

  ValidatorFunction with properties:

      Data: [99 117 98 105 99]
    Interp: 'linear'

Присвоение Interp свойство требует точного совпадения.

a = ValidatorFunction;
a.Interp = 'cu'
Error setting property 'Interp' of class 'ValidatorFunction':
Value must be a member of this set
    linear
    cubic
    spline

Использование класса перечисления обеспечивает неточное соответствие и нечувствительность к регистру.

Класс перечисления для неточного сопоставления

Проверка свойств с использованием класса перечисления обеспечивает следующие преимущества:

  • Неточное сопоставление без учета регистра для однозначных векторов символов или строковых скаляров

  • Преобразование неточных совпадений в правильные значения

Например, предположим, что вы определяете InterpMethod класс перечисления для Interp проверка свойств.

classdef InterpMethod
   enumeration
      linear
      cubic
      spline
   end
end

Изменить Interp проверка свойств для использования InterpMethod класс.

classdef ValidatorFunction
   properties
      Data {mustBeNumeric, mustBeFinite}
      Interp InterpMethod
   end
end

Назначить значение, соответствующее первым нескольким буквам 'cubic'.

a = ValidatorFunction;
a.Interp = 'cu'
a = 

  ValidatorFunction with properties:

      Data: []
    Interp: cubic

Определение функций проверки

Функции проверки - это обычные функции MATLAB, предназначенные для конкретной цели проверки значений свойств и аргументов функций. Функции, используемые для проверки свойств:

  • Принять значение потенциального свойства в качестве входного аргумента

  • Не возвращать значения

  • Выбрасывать ошибки при сбое проверки

Создание собственной функции проверки полезно при необходимости предоставления определенной проверки, недоступной с помощью функций проверки MATLAB. Можно создать локальные функции в файле класса или поместить функцию в путь MATLAB для использования в любом классе.

Например, ImgData класс использует локальную функцию для определения средства проверки, которое ограничивает Data свойство только для uint8 или uint16 значения, исключая подклассы и не разрешая преобразование из других числовых классов. Предопределенная функция проверки mustBeInRange ограничивает диапазон допустимых значений.

classdef ImgData
    properties
        Data {mustBeImData(Data), mustBeInRange(Data,0,255)} = uint8(0)
    end
end
function mustBeImData(a)
    % Check for specific class     
    if ~(strcmp(cname, 'uint8') || strcmp(cname, 'uint16'))
        eidType = 'ImData:notUint8OrUint16';
        msgType = 'Value assigned to Data property is not uint8 or uint16 data.';
        throwAsCaller(MException(eidType,msgType))
    end
end

При создании экземпляра ImgData класс MATLAB проверяет, что значением по умолчанию является uint8 или uint16 значение, в диапазоне 0...255, и не пустой. Обратите внимание, что значение по умолчанию должно удовлетворять требованиям проверки, как и любое другое значение, назначенное свойству.

a = ImgData
a = 

  ImgData with properties:

    Data: 0

Назначение свойства вызывает средства проверки в порядке слева направо. Назначение char вектор к Data свойство вызывает ошибку, вызванную mustBeImData.

a.Data = 'red';
Error setting property 'Data' of class 'ImgData'. Value assigned to
Data property is not uint8 or uint16 data.

Назначение числового значения вне диапазона приводит к ошибке, вызванной mustBeInRange.

a.Data = uint16(312);
Error setting property 'Data' of class 'ImgData'. Value must be greater
than or equal to 0, and less than or equal to 255.

Для получения информации о связанных функциях см. раздел mustBeInteger, mustBeNumeric, и mustBePositive.

Добавить поддержку функций проверки

Поддержка функций проверки MATLAB для объектов класса путем реализации зависимых функций в качестве методов класса. Для определения методов, реализуемых для каждой функции, см. страницы ссылок на функцию проверки, перечисленные в этой таблице MATLAB Функции проверки.

Например, предположим, что вы хотите, чтобы ваш класс поддерживал mustBeGreaterThan функция проверки. Перегружайте эти функции MATLAB как методы в классе:

  • isreal - Всегда возвращать логические true потому что mustBeGreaterThan не поддерживает комплексные числа.

  • gt - второй объект в сравнении должен быть скалярным, как того требует mustBeGreaterThan.

SupportmBGT класс реализует поддержку для mustBeGreaterThan.

classdef SupportmBGT
   properties
      Prop(1,1) double {mustBeReal}
   end
   methods
      function obj = SupportmBGT(data)
         if nargin > 0
            obj.Prop = data;
         end
      end
      function tf = isreal(obj)
         tf = true;
      end
      function tf = gt(obj1, obj2)
         tf = [obj1(:).Prop] > obj2.Prop;
      end
   end
end

Использовать mustBeGreaterThan с объектами этого класса:

a = SupportmBGT(10);
b = SupportmBGT(12);
mustBeGreaterThan(a,b)
Error using mustBeGreaterThan (line 19)
Value must be greater than the comparison value.

Связанные темы