Оператор = (равно) используется для присваивания переменным значений или быстрого вывода информации в консоль:
> x = 7
> print(x)
7
> = 7
7
Операторы для арифметических выражений:
> = 2+3, 5-12, 2*7, 7/8
5 -7 14 0.875
> = 5*(2-8.3)/77.7+99.1
98.694594594595
Унарное отрицание:
> = -(-10), -(10)
10 -10
Остаток от деления по модулю:
> = 15%7, -4%3, 5.5%1
1 -1 0.5
Степень числа:
> = 7^2, 107^0, 2^8
49 1 256
Операторы сравнения
Сравнения возвращают логическое значение true или false.
- == равно
- ~= не равно
- < меньше
- > больше
- <= меньше или равно
- >= больше или равно
Примеры:
> = 1 == 1, 1 == 0
true false
> = 1 ~= 1, 1 ~= 0
false true
> = 3 < 7, 7 < 7, 8 < 7
true false false
> = 3 > 7, 7 > 7, 8 > 7
false false true
> = 3 <= 7, 7 <= 7, 8 <= 7
true true false
> = 3 >= 7, 7 >= 7, 8 >= 7
false true true
Также работает и со строками:
> = "abc" < "def"
true
> = "abc" > "def"
false
> = "abc" == "abc"
true
> = "abc" == "a".."bc"
true
Объекты не будут равны, если имеют разный тип или относятся к разным объектам:
> = {} == "table"
false
> = {} == {} -- созданы две разные таблицы
false
> t = {}
> t2 = t
> = t == t2 -- ссылаемся на одну и ту же таблицу
true
Автоматическое приведение типов не работает при сравнении. Типы должны быть приведены явно:
> = "10" == 10
false
> = tonumber("10") == 10
true
Логические операторы
в Lua существуют логические операторы and, or и not. В Lua только типы nil и false возвращают логическое значение false, все остальные - true, даже 0.
> = false==nil -- хоть эти типы оба и обозначают ""ложность", это всё-таки разные типы
false
> = true==false, true~=false
false true
> = 1==0
false
Ключевое слово not меняет логическое значение на противоположенное:
> = true, false, not true, not false
true false false true
> = not nil -- nil обозначает false
true
> = not not true -- true = not not true!
true
> = not "foo" -- всё что не равно false или nil = true
false
Оператор and во многих языках возвращает логическое значение в зависимости от двух аргументов. Но в Lua, возвращается первый аргумент (без учёта второго) если его значение false или nil, и второй, если первый не равен false или nil.
> = false and true -- первый аргумент - false, он и возвращается
false
> = nil and true -- по аналогии
nil
> = nil and false
nil
> = nil and "hello", false and "hello"
nil false
> = false and print("hello")
false
В примерах выше, возвращается всегда первый аргумент, а в этих примерах - второй, т.к. первый не равен false или nil
> = true and false
false
> = true and true
true
> = 1 and "hello", "hello" and "there"
hello there
> = true and nil
nil
> = true and print("hello")
hello
Оператор or возвращает первый аргумент, если он не равен false или nil, иначе возвращается второй аргумент:
> = true or false
true
> = true or nil
true
> = "hello" or "there", 1 or 0
hello 1
> = true or print("hello")
true
И парочка примеров с возвратом второго аргумента:
> = false or true
true
> = nil or true
true
> = nil or "hello"
hello
> = false or print("hello")
hello
Таким образом можно удобно устанавливать значения по умолчанию:
> function foo(x)
>> local value = x or "default" -- если x = false или nil, установится значение "default"
>> print(value, x)
>> end
>
> foo() -- мы не передали в функцию аргумент, поэтому x = nil
default nil
> foo(1)
1 1
> foo(true)
true true
> foo("hello")
hello hello
Хоть в Lua нету троичного оператора, но можно создать что-то похожее, используя операторы and и оr
value = condition and trueval or falseval;
Если условие (condition) = true, возвращается trueval, в противном случае - falseval
Выражение подобно конструкции a?b:c в C/js.
Помните, что у оператора and больший приоритет, чем у or
Выражение подобно конструкции a?b:c в C/js.
Помните, что у оператора and больший приоритет, чем у or
value = (condition and trueval) or falseval;
данная статья является вольным переводом с сайта lua-users.org
с возможными дополнениями и изменениями
с возможными дополнениями и изменениями