Тестирование на больше-всего-производный-класс

Если вы задаете функции, которые требуют входных параметров, которые являются:

  • Встроенные типы MATLAB®

  • Не подклассы встроенных типов MATLAB

используйте следующий метод, чтобы исключить подклассы встроенных типов от входных параметров.

  • Задайте массив ячеек, который содержит имена встроенных типов, принятых вашей функцией.

  • Вызовите class, и strcmp, чтобы протестировать на определенные типы в MATLAB проверяют утверждение.

Следующий код тестирует входной параметр, inputArg:

if strcmp(class(inputArg),'single')
   % Call function
else
   inputArg = single(inputArg);
end

Тестирование на категорию типов

Предположим, что вы создаете MEX-функцию, myMexFcn, который требует двух числовых входных параметров, которые должны иметь тип double или single:

outArray = myMexFcn(a,b)

Задайте массив ячеек floatTypes, который содержит слова double и single:

floatTypes = {'double','single'};
% Test for proper types
if any(strcmp(class(a),floatTypes)) && ...
   any(strcmp(class(b),floatTypes))
   outArray = myMexFcn(a,b);
else
   % Try to convert inputs to avoid error
   ...
end

Другой тест для встроенных типов

Можно использовать isobject, чтобы разделить встроенные типы от подклассов встроенных типов. Функция isobject возвращает false для экземпляров встроенных типов. Например:

% Create a int16 array
a = int16([2,5,7,11]);
isobject(a)
ans =
     0

Определите, является ли массив одним из встроенных целых типов:

if isa(a,'integer') && ~isobject(a)
   % a is a built-in integer type
   ...
end
Была ли эта тема полезной?