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.
В этом примере мы сначала тестируем, если данное выражение имеет подвыражение типа 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)
Мы демонстрируем использование дополнительного третьего аргумента. Мы хотим проверять, содержит ли процедура подвыражение типа "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})
Поскольку матрицы обладают слотом 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})
Мы демонстрируем как эффекты 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:
|
Произвольный объект MuPAD® |
| |
|
object