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

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