API contains - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
contains
Оглавление · Алфавитный указатель · BASIC built-ins
ClassicUO • Runtime API
Проверяет наличие всех битов маски, подстроки либо элемента массива в зависимости от видов аргументов.
Точный синтаксис
contains(collection:Any, flag:Any) -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
collection— Integer для битовой маски, String для подстроки либо Array для элемента.flag— Integer-маска, String-подстрока или искомое значение массива соответственно.
Возвращает
Integer Boolean: 1 — условие выполнено, 0 — нет. Для пары Integer проверяется (collection AND mask)=mask, поэтому нулевая маска всегда даёт 1. Для строк пустая подстрока совпадает. Вложенные Array и Object сравниваются по тождеству: ссылка на тот же массив/объект совпадает, разные экземпляры — нет. Это не рекурсивный поиск.
Поведение
- Сравнение внешних элементов не изменяет коллекцию. Integer 1 равен Decimal 1.0, но строка "1" им не равна.
- Для сравнения содержимого двух разных массивов переберите их элементы явно; одинаковый вид Array не означает равенство.
Примеры
Пример 1. Проверить элемент списка
# Проверить элемент списка
#
# Проверяет наличие всех битов маски, подстроки либо элемента массива в зависимости от видов
# аргументов.
#
# Integer Boolean: 1 — условие выполнено, 0 — нет. Для пары Integer проверяется (collection AND
# mask)=mask, поэтому нулевая маска всегда даёт 1. Для строк пустая подстрока совпадает.
# Вложенные Array и Object сравниваются по тождеству: ссылка на тот же массив/объект совпадает,
# разные экземпляры — нет. Это не рекурсивный поиск.
SUB Main()
# DIM values(1) создаёт два элемента. Первый аргумент команды — Array, второй — число 20.
# Совпадение во внешнем уровне даёт 1; индекс элемента не возвращается.
DIM values(1)
values[0] = 10
values[1] = 20
IF contains(values, 20) THEN
UO.Print('20 is in the array')
END IF
END SUB
Разбор параметров и выполнения:
- DIM values(1) создаёт два элемента. Первый аргумент команды — Array, второй — число 20.
- Совпадение во внешнем уровне даёт 1; индекс элемента не возвращается.
Пример 2. Не путать числовой текст с числом
# Не путать числовой текст с числом
#
# Проверяет наличие всех битов маски, подстроки либо элемента массива в зависимости от видов
# аргументов.
#
# Integer Boolean: 1 — условие выполнено, 0 — нет. Для пары Integer проверяется (collection AND
# mask)=mask, поэтому нулевая маска всегда даёт 1. Для строк пустая подстрока совпадает.
# Вложенные Array и Object сравниваются по тождеству: ссылка на тот же массив/объект совпадает,
# разные экземпляры — нет. Это не рекурсивный поиск.
SUB Main()
# DIM values(0) создаёт один элемент. Искомая строка "10" отличается видом от Integer 10.
# Результат 0; команда не выполняет неявный val для строк.
DIM values(0)
values[0] = 10
UO.Print(STR(contains(values, '10')))
END SUB
Разбор параметров и выполнения:
- DIM values(0) создаёт один элемент. Искомая строка "10" отличается видом от Integer 10.
- Результат 0; команда не выполняет неявный val для строк.
Пример 3. Проверить ссылку на вложенный массив
# Проверить ссылку на вложенный массив
#
# Проверяет наличие всех битов маски, подстроки либо элемента массива в зависимости от видов
# аргументов.
#
# Integer Boolean: 1 — условие выполнено, 0 — нет. Для пары Integer проверяется (collection AND
# mask)=mask, поэтому нулевая маска всегда даёт 1. Для строк пустая подстрока совпадает.
# Вложенные Array и Object сравниваются по тождеству: ссылка на тот же массив/объект совпадает,
# разные экземпляры — нет. Это не рекурсивный поиск.
SUB Main()
# outer[0] содержит тот же массив child; оба DIM задают единственный индекс 0.
# Результат 1. Другой отдельно созданный массив с такими же числами дал бы 0.
DIM child(0)
DIM outer(0)
outer[0] = child
UO.Print(STR(contains(outer, child)))
END SUB
Разбор параметров и выполнения:
- outer[0] содержит тот же массив child; оба DIM задают единственный индекс 0.
- Результат 1. Другой отдельно созданный массив с такими же числами дал бы 0.
Пример 4. Проверить набор битов
# Проверить набор битов
#
# Проверяет наличие всех битов маски, подстроки либо элемента массива в зависимости от видов
# аргументов.
#
# Integer Boolean: 1 — условие выполнено, 0 — нет. Для пары Integer проверяется (collection AND
# mask)=mask, поэтому нулевая маска всегда даёт 1. Для строк пустая подстрока совпадает.
# Вложенные Array и Object сравниваются по тождеству: ссылка на тот же массив/объект совпадает,
# разные экземпляры — нет. Это не рекурсивный поиск.
SUB Main()
# 7 имеет биты 1,2,4; маска 3 требует биты 1 и 2 одновременно.
# Результат 1. Это не логический AND двух истинных чисел.
UO.Print(STR(contains(7, 3)))
END SUB
Разбор параметров и выполнения:
- 7 имеет биты 1,2,4; маска 3 требует биты 1 и 2 одновременно.
- Результат 1. Это не логический AND двух истинных чисел.
Пример 5. Найти часть строки
# Найти часть строки
#
# Проверяет наличие всех битов маски, подстроки либо элемента массива в зависимости от видов
# аргументов.
#
# Integer Boolean: 1 — условие выполнено, 0 — нет. Для пары Integer проверяется (collection AND
# mask)=mask, поэтому нулевая маска всегда даёт 1. Для строк пустая подстрока совпадает.
# Вложенные Array и Object сравниваются по тождеству: ссылка на тот же массив/объект совпадает,
# разные экземпляры — нет. Это не рекурсивный поиск.
SUB Main()
# Оба аргумента String, поэтому ищется точная подстрока.
# Результат 1; поиск учитывает регистр и не возвращает позицию.
UO.Print(STR(contains('Iron ore', 'ore')))
END SUB
Разбор параметров и выполнения:
- Оба аргумента String, поэтому ищется точная подстрока.
- Результат 1; поиск учитывает регистр и не возвращает позицию.