hastype

Протестируйте, если объект заданного типа происходит в другом объекте

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

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

Синтаксис

hastype(object, T, <inspect>)

Описание

hastype(object, T) тестирует, если объект типа T происходит синтаксически в object.

hastype(object, T) тестирует, если подобъект s типа, T происходит в object, т.е. таким образом, что testtype(s, T) возвращает TRUE.

Спецификатор типа T может быть или доменным типом, таким как DOM_INT, DOM_EXPR и т.д., строка, как возвращено функциональным type, или Текстовым объектом. Последние являются, вероятно, самыми полезными предопределенными значениями для аргумента T.

Если T не является допустимым спецификатором типа, то hastype возвращает FALSE.

Смотрите пример 1.

Если object является выражением, то hastype(object, T) тестирует, содержит ли object подвыражение типа T; смотрите Пример 1.

Если object является контейнером, то hastype проверяет, происходит ли подобъект типа T в записи object; смотрите Пример 4.

Если второй аргумент является списком или набором, проверки hastype, происходит ли подобъект одного из типов в T в object. Смотрите Пример 1.

hastype работает рекурсивным способом и убываниями в следующие объекты: выражения, массивы, hfarrays, списки, наборы и таблицы. Смотрите Пример 4. hastype не продвигается в другие основные области, такие как рациональные числа, комплексные числа, полиномы или процедуры. Смотрите Пример 2.

Если третий аргумент inspect присутствует, то hastype также продвигается рекурсивно в подобъекты доменных типов, данных в inspect. Смотрите Пример 2.

Примечание

hastype только ищет подобъекты, которые синтаксически имеют тип T. Свойства набора идентификаторов через assume не учтены; смотрите Пример 4.

Примеры

Пример 1

В этом примере мы сначала тестируем, если данное выражение имеет подвыражение типа DOM_FLOAT:

hastype(1.0 + x, DOM_FLOAT)

hastype(1 + x, DOM_FLOAT)

Мы можем также протестировать, если выражения содержат подвыражение одного из двух типов DOM_FLOAT или DOM_INT:

hastype(1.0 + x, {DOM_FLOAT, DOM_INT})

В то время как первый из следующих двух тестов возвращает FALSE, поскольку tan не является допустимым спецификатором типа, второй тест приводит к TRUE, поскольку данное выражение содержит подвыражение типа "tan":

hastype(sin(tan(x) + 1/exp(1 - x)), tan),
hastype(sin(tan(x) + 1/exp(1 - x)), "tan")

Можно также использовать спецификаторы типа от Библиотеки типов:

hastype([-1, 10, -5, 2*I], Type::PosInt)

Пример 2

Мы демонстрируем использование дополнительного третьего аргумента. Мы хотим проверять, содержит ли процедура подвыражение типа "float". По умолчанию hastype не убывает рекурсивно в процедуру:

f := x -> float(x) + 3.0:
hastype(f, "float")

Можно использовать третий аргумент, чтобы запросить контроль процедур явным образом:

hastype(f, "float", {DOM_PROC})

Кроме того, по умолчанию hastype не убывает рекурсивно в основные области DOM_COMPLEX и DOM_RAT:

hastype(1 + I, DOM_INT), hastype(2/3,  DOM_INT)

В порядке осмотреть эти типы данных, нужно использовать третий аргумент:

hastype(1 + I, DOM_INT, {DOM_COMPLEX}),
hastype(2/3,  DOM_INT, {DOM_RAT})

Пример 3

Поскольку матрицы обладают слотом enableMaprec, hastype автоматически осматривает их записи.

A := matrix([[1, 1], [1, 0]]):
hastype(A, DOM_INT)

Также возможно осмотреть элементы других областей с помощью третьего аргумента. Когда пример позволил нам задать перестановку и попросить подвыражение целого числа типа:

G:= Dom::SymmetricGroup(4):
perm:= G([2,4, 3, 1]):
hastype(perm, DOM_INT), hastype(perm, DOM_INT, {G})

Пример 4

Мы демонстрируем как эффекты hastype на контейнерные объекты. Давайте сначала подчеркнем таблицы:

hastype(table(1 = a), DOM_INT), hastype(table(a = 1), DOM_INT)

Как показано hastype не осматривает индексы таблицы, но проверяет рекурсивно, происходит ли подобъект данного типа в записи. Это также верно для массивов, hfarrays, списков и наборов:

hastype(array(1..4, [1, 2, 3, 4]), DOM_INT),
hastype(hfarray(1..3, [1.0, 2.0, 3.0*I]), DOM_COMPLEX),
hastype([1, 2, 3, 4], DOM_INT),
hastype({1, 2, 3, 4}, DOM_INT),
hastype([[a, [1]], b, c], DOM_INT)

hastype может только работать синтаксически, т.е. свойства не учтены:

assume(a,Type::Integer):
hastype([a, b], Type::Integer), hastype([a, b], DOM_INT)

delete a:

Параметры

object

Произвольный объект MuPAD®

T

Спецификатор типа, или набор или список спецификаторов типа

inspect

Набор доменных типов

Возвращаемые значения

Или TRUE или FALSE.

Перегруженный

object

Смотрите также

Функции MuPAD