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

Функции валидации MATLAB

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

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

Имя

Значение

Функции, обращенные входные параметры

mustBePositiveЗначение

value > 0

gt, isreal, isnumeric, islogical

mustBeNonpositiveЗначение

value <= 0

ge, isreal, isnumeric, islogical

mustBeNonnegativeЗначение

value >= 0

ge, isreal, isnumeric, islogical

mustBeNegativeЗначение

value < 0

lt, isreal, isnumeric, islogical

mustBeFiniteЗначение

value не имеет никакого NaN и никакой Inf элементы.

isfinite

mustBeNonNanЗначение

value не имеет никакого NaN элементы.

isnan

mustBeNonzeroЗначение

value ~= 0

eq, isnumeric, islogical

mustBeNonsparseЗначение

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

issparse

mustBeRealЗначение

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

isreal

mustBeIntegerЗначение

value == floor(value)

isreal, isfinite, floor, isnumeric, islogical

mustBeNonmissingЗначение

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

ismissing

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

Имя

Значение

Функции, обращенные входные параметры

mustBeGreaterThan(значение, c)

value > c

gt, isscalar, isreal, isnumeric, islogical

mustBeLessThan(значение, c)

value < c

lt, isreal, isnumeric, islogical

mustBeGreaterThanOrEqual(значение, c)

value >= c

ge, isreal, isnumeric, islogical

mustBeLessThanOrEqual(значение, c)

value <= c

le, isreal, isnumeric, islogical

Типы данных

Имя

Значение

Функции, обращенные входные параметры

mustBeA(значение, имена классов)

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

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

mustBeNumericЗначение

value mustBeNumeric.

isnumeric

mustBeNumericOrLogicalЗначение

value mustBeNumericOrLogical.

isnumeric, islogical

mustBeFloatЗначение

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

isfloat

mustBeUnderlyingType(значение, typename)

value должно быть, задал базовый тип.

isUnderlyingType

Размер

Имя

Значение

Функции, обращенные входные параметры

mustBeNonemptyЗначение

value не пусто.

isempty

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

isscalar, isempty

mustBeVectorЗначениеvalue должен быть вектор.

isvector

Членство и область значений

Имя

Значение

Функции, обращенные входные параметры

mustBeMemberЗначения

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

ismember

mustBeInRange(значение, ниже, верхнее, boundflags)value должен быть в области значений.

gt, ge, lt, le

Текст

Имя

Значение

Функции, обращенные входные параметры

mustBeFilepath

path должен относиться к файлу.

isfile

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

isfolder

mustBeNonzeroLengthTextЗначение

value должна быть часть текста с ненулевой длиной.

Не применяется

mustBeTextЗначение

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

Не применяется

mustBeTextScalarЗначение

value должна быть одна часть текста.

Не применяется
mustBeValidVariableNamevarName 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 Validation Functions.

Например, предположите, что вы хотите, чтобы ваш класс поддержал 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.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте