Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[Обучение] Основы Lua.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
66.67 Кб
Скачать

Операции

Ниже перечислены основные операции:

- смена знака

+ - * / арифметика

^ возведение в степень

== ~= равенство

< <= > >= порядок

not and or логика

.. конкатенация строк

# получение длины строки или массива

При применении арифметических операций строки, имеющие числовое значение, приводятся к нему. При конкатенации числовых значений они автоматически преобразуются в строки.

При сравнении на равенство не производится преобразование типов. Объекты разных типов всегда считаются различными.

Соответственно "0" ~= 0, а при индексировании a[0] и a["0"] соответствуют разным ячейкам массива. При сравнении на равенство/неравенство объектов производится сравнение ссылок на объекты. Равными оказываются переменные, ссылающиеся на один и тот же объект.

При выяснении порядка типы аргументов должны совпадать, т.е. числа сравниваются с числами, а строки  —  со строками.

Отношения равенства и порядка всегда дают в результате true или false т.е. логическое значение.

В логических операциях nil рассматривается как false, а все остальные значения, включая нулевое число и пустую строку  —  как true.

При вычислении значения используется короткая схема  —  второй аргумент вычисляется только если это необходимо.

Действует следующая таблица приоритетов и ассоциативности операций:

[right] ^

[left] not # -(unary)

[left] * /

[left] + -

[left] < > <= >= ~= ==

[right] ..

[left] and

[left] or

Логические операции и связанные с ними идиомы

Я надеюсь, вы в курсе, что такое логика в программировании?

Оператор not всегда возвращает логическое значение, принимая аргумент произвольного типа (при этом только значение nil соответствует логическому значению false, остальные же трактуются как true). В отличие от него операторы and и or всегда возвращают один из своих аргументов. Оператор or возвращает свой первый аргумент, если его значение отлично от false и nil и второй аргумент в противном случае. Оператор and возвращает свой первый аргумент, если его значение равно false или nil и второй аргумент в противном случае. Такое поведение основано на том, что все значения, отличные от nil, трактуются как true.

С этим поведением связано несколько общеупотребительных идиом. В следующей таблице слева приведена идиоматическая операция, а справа  —  эквивалентная обычная запись:

x = x or v if x == nil then x = v end

x = (e and a) or b if e ~= nil then x = a else x = b end

Первая идиома часто используется для присвоения неинициализированной переменной умалчиваемого значения. Вторая идиома эквивалентна C'шному оператору x = e ? a, b (здесь считается, что значение переменной a отлично от nil).