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; поиск учитывает регистр и не возвращает позицию.