Filter

Filter is an arithmetical expression, that contains constants, functions and operations.

There are two types of constants - number and string.
Numerical constant is a simple integer value.
For example: 1, 0, 2000, -500, 1024.
(Also numerical constants could be in hexadecimal form, prefix '0x' should be used for it.
Examples of such constants: 0xff, 0x10000.

String constants is a sequence of characters between quotes (") or apostrophe (').
Examples of string contants are: "Vasya", "Zul", 'Petya', 'Misha'.
Что бы добавить кавычку (") в строковую константу надо написать перед ней \. Например "Vasya - \"Hero\"", будет преобразовано в: Vasya - "Hero".
Так же можно использовать кавычки внутри строк ограниченных апострофами, и наоборот. Например такой же результат можно получить написав 'Vasya - "Hero"'.

Допустимы следующие операции. Операции сгрупированны по приоритету.

or

логическое "или". В случае если первый аргумент 0, возвращает второй аргумент, в противном случае возращает первый аргумент.

Примеры:

  • 0 or 123Результат: 123
  • "vasya" or "petya"Результат: "vasya"
  • 1 or 0Результат: 1
and

логическое "и". В случае если первый аргумент 0, возвращает первый аргумент, в противном случае возвращает второй аргумент.

Примеры:

  • 0 and 10Результат: 0
  • 10 and 20Результат: 20
|

побитовое "или".

Примеры:

  • 12 | 0x100Результат: 268
^

побитовое "исключающее или".

Примеры:

  • 0xff ^ 64Результат: 191
&

побитовое "и".

Примеры:

  • 0xff & 64Результат: 64
~= ==

  • ==эквивалентность, если аргументы имеют одинаковые типы то делает обычное сравнение, и если они равны то возвращает 1, в противном случае возвращает 0.
  • ~=возвращает результат противоположный ==.
  • Примеры:

    • 10 == 10Результат: 1
    • 10 == "10"Результат: 0
    • "vasya" ~= "petya"Результат: 1
    < > <= >=

    операторы отношения.

    • если аргументы имеют одинаковые типы, то выполняет соотвествующее сравнение, в противном случае происходит ошибка. (В случае строк происходит лексикографическое сравнение)

    Примеры:

    • 5 <= 5Результат: 1
    • 5 >= 6Результат: 0
    • 1 < 3Результат: 1
    • 3 > 3Результат: 0
    • "vasya" > "petya"Результат: 1
    • 5 < "5"Ошибка вычисления
    ..

    оператор конкатенации.

    Если оба агрумента строки выполняет их конкатенацию, в противном случае аргументы преобразуются к строкам и так же делается конкатенация.

    Примеры:

    • "vasya" .. " ivanov"Результат: "vasya ivanov"
    • 2 .. 3Результат: "23"
    << >>

    побитовый сдвиг

    Примеры:

    • 1 << 8Результат: 256
    • 243 >> 4Результат: 15
    + -

    арифметические операции.

    Если оба агрумента числа выполняет указанную арифметическую операцию, в противном случае аргументы преобразуются к числам и так же выполняется арифметическая операция.

    Примеры:

    • 5 + 6Результат: 11
    • 4 - 8Результат: -4
    • "78" + 2Результат: 80
    • "vasya" + 0Результат: 0
    * / %

    арифметические операции, действуют аналогично указанным выше.

    Примеры:

    • 5 * 6Результат: 30
    • 9 / 2Результат: 4
    • 1 / 0Ошибка вычислений
    not # - (unary)

    унарные операции.

    • notесли аргумент 0, то возвращает 1, в противном случае 0. В случае необходимости выполняется преобразование аргумента к числу.
    • #возвращает длину аргумента как строки, выполняя необходимое преобразование если необходимо.
    • -возвращает противоположное число.

    Примеры:

    • not 5Результат: 0
    • #"vasya"Результат: 5
    • -"78"Результат: -78

    Примеры выражений:

    • 2 + 3 * 4Результат: 14
    • not 0 and 0Результат: 0
    • 5 ~= 6 or 7 == 8Результат: 1
    • 850 * 100 / 1000Результат: 85

    Функции доступные в выражениях перечислены тут.