Операторы в Lua

Операторы — это специальные символы, которые указывают интерпретатору выполнять определенные математические или логические операции. Lua предоставляет следующие типы операторов:

  • Арифметические операторы
  • Операторы отношения
  • Логические операторы
  • Другие операторы

Арифметические операторы

В следующей таблице перечислены распространенные арифметические операторы в языке Lua. Предположим, что значение A равно 10, а значение B равно 20:

OperatorОписаниеПример
+СложениеA + B выводит 30
-ВычитаниеA - B выводит -10
*УмножениеA * B выводит 200
/ДелениеB / A выводит 2
%МодульB % A выводит 0
^Возведение в степеньA^2 выводит 100
-Отрицательный знак-A выводит -10
//Оператор целочисленного деления (>=lua5.3) 5//2Выводит 2

Примеры

Мы можем более подробно понять применение арифметических операторов на следующих примерах:

Примеры

a = 21
b = 10
c = a + b
print("Строка 1 - Значение c равно ", c )
c = a - b
print("Строка 2 - Значение c равно ", c )
c = a * b
print("Строка 3 - Значение c равно ", c )
c = a / b
print("Строка 4 - Значение c равно ", c )
c = a % b
print("Строка 5 - Значение c равно ", c )
c = a^2
print("Строка 6 - Значение c равно ", c )
c = -a
print("Строка 7 - Значение c равно ", c )

Вывод вышеприведённой программы:

Line 1 - c 的值为     31
Line 2 - c 的值为     11
Line 3 - c 的值为     210
Line 4 - c 的值为     2.1
Line 5 - c 的值为     1
Line 6 - c 的值为     441
Line 7 - c 的值为     -21

В Lua,// используется для операции деления, и результат вычисления включает дробную часть.//// используется для операции целочисленного деления, и результат вычисления не включает дробную часть:

Примеры

a = 5
b = 2

print("Операция деления - Значение a/b равно ", a / b )
print("Операция целочисленного деления - Значение a//b равно ", a // b )

Вывод вышеприведённой программы:

除法运算 - a/b 的值为   2.5
整除运算 - a//b 的值为  2

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

В следующей таблице перечислены распространенные операторы отношения в языке Lua. Предположим, что значение A равно 10, а значение B равно 20:

OperatorОписаниеПример
==Равно, проверяет, равны ли два значения. Если они равны, возвращает true; в противном случае возвращает false.(A == B) ложно.
~=Не равно, проверяет, равны ли два значения. Если они не равны, возвращает true; в противном случае возвращает false.(A ~= B) истинно.
>Больше, если левое значение больше правого значения, возвращает true; в противном случае возвращает false.(A > B) ложно.
<Меньше, если левое значение больше правого значения, возвращает false; в противном случае возвращает true.(A < B) истинно.
>=Больше или равно, если левое значение больше или равно правому значению, возвращает true; в противном случае возвращает false.(A >= B) возвращает false.
<=Меньше или равно: если левое значение меньше или равно правому значению, возвращает true; в противном случае возвращает false.(A <= B) возвращает true.

Примеры

Мы можем лучше понять применение операторов отношения на следующих примерах:

Примеры

a = 21
b = 10

if( a == b )
затем
   print("Строка 1 - a равно b" )
else
   print("Строка 1 - a не равно b" )
end

if( a ~= b )
затем
   print("Строка 2 - a не равно b" )
else
   print("Строка 2 - a равно b" )
end

if ( a < b )
затем
   print("Строка 3 - a меньше b" )
else
   print("Строка 3 - a больше или равно b" )
end

if ( a > b )
затем
   print("Строка 4 - a больше b" )
else
   print("Строка 5 - a меньше или равно b" )
end

-- Измените значения a и b
a = 5
b = 20
if ( a <= b )
затем
   print("Строка 5 - a меньше или равно b" )
end

if ( b >= a )
затем
   print("Строка 6 - b больше или равно a" )
end

Вывод вышеприведённой программы:

Line 1 - a 不等于 b
Line 2 - a 不等于 b
Line 3 - a 大于等于 b
Line 4 - a 大于 b
Line 5 - a 小于等于  b
Line 6 - b 大于等于 a

Логические операторы

В следующей таблице перечислены распространённые логические операторы в языке Lua. Предположим, что значение A истинно, а значение B ложно:

OperatorОписаниеПример
иЛогический оператор AND. Если A ложно, возвращает A; в противном случае возвращает B.(A and B) ложно.
илиЛогический оператор OR. Если A истинно, возвращает A; в противном случае возвращает B.(A or B) истинно.
notЛогический оператор NOT. Он противоположен результату логической операции. Если условие истинно, логическое NOT ложно.not(A and B) истинно.

Примеры

Применение логических операторов можно более полно понять на следующих примерах:

Примеры

a = истина
b = истина

if ( a and b )
затем
   print("a and b - Условие истинно" )
end

if ( a or b )
затем
   print("a or b - условие истинно" )
end

print("---------Разделитель---------" )

-- Измените значения a и b
a = false
b = истина

if ( a and b )
затем
   print("a and b - Условие истинно" )
else
   print("a and b - условие ложно" )
end

if ( not( a and b) )
затем
   print("not( a and b) - условие истинно" )
else
   print("not( a and b) - условие ложно" )
end

Вывод вышеприведённой программы:

a and b - 条件为 true
a or b - 条件为 true
---------分割线---------
a and b - 条件为 false
not( a and b) - 条件为 true

Другие операторы

В следующей таблице перечислены операторы конкатенации и операторы вычисления длины таблиц или строк в языке Lua:

OperatorОписаниеПример
..Конкатенирует две строкиa..b, где a — "Hello ", а b — "World", результат вывода — "Hello World".
#Унарный оператор, возвращающий длину строки или таблицы.#"Hello" возвращает 5

Примеры

Мы можем более подробно понять применение операторов конкатенации и операторов для вычисления длины таблиц или строк на следующих примерах:

Примеры

a = "Hello "
b = "World"

print("Объединить строки a и b ", a..b )

print("Длина строки b ",#b )

print("Длина строки Test ",#"Test" )

print("Длина URL учебного сайта Example ",#"www.example.com" )

Вывод вышеприведённой программы:

连接字符串 a 和 b     Hello World
b 字符串长度     5
字符串 Test 长度     4
Example网址长度     14

Приоритет операторов

От высшего к низшему:

^
not    - (unary)
*      /       %
+      -
..
<      >      <=     >=     ~=     ==
and
or

За исключением^и..все остальные бинарные операторы являются левоассоциативными.

a+i < b/2+1          <-->       (a+i) < ((b/2)+1)
5+x^2*8              <-->       5+((x^2)*8)
a < y and y <= z     <-->       (a < y) and (y <= z)
-x^2                 <-->       -(x^2)
x^y^z                <-->       x^(y^z)

Примеры

Мы можем более подробно понять приоритет операторов языка Lua на следующих примерах:

Примеры

a = 20
b = 10
c = 15
d = 5

e = (a + b) * c / d;-- ( 30 * 15 ) / 5
print("значение операции (a + b) * c / d равно :",e )

e = ((a + b) * c) / d; -- (30 * 15 ) / 5
print("значение операции ((a + b) * c) / d равно :",e )

e = (a + b) * (c / d);-- (30) * (15/5)
print("(a + b) * (c / d) значение операции :",e )

e = a + (b * c) / d;  -- 20 + (150/5)
print("a + (b * c) / d значение операции :",e )

Вывод вышеприведённой программы:

(a + b) * c / d 运算值为  :    90.0
((a + b) * c) / d 运算值为 :    90.0
(a + b) * (c / d) 运算值为 :    90.0
a + (b * c) / d 运算值为   :    50.0
Другие расширения