<< Click to Display Table of Contents >> Navigation: Modbus Universal MasterOPC Server > Руководство по языку Lua 5.1 > Язык и синтаксис > Выражения > Выражения |
Выражениями в Lua являются следующие конструкции:
exp ::= prefixexp
exp ::= nil | false | true
exp ::= Number
exp ::= String
exp ::= function
exp ::= tableconstructor
exp ::= `...?
exp ::= exp binop exp
exp ::= unop exp
prefixexp ::= var | functioncall | `(? exp `)?
Несколько примеров:
f() -- результат функции отбрасывается
g(f(), x) -- берется первое значение из списка - результата вызова f()
g(x, f()) -- g получает x и все значения, полученные из f()
a,b,c = f(), x -- берется первый элемент результата вызова f()(и c получает nil)
a,b = ... -- a получает первый параметр из ...,
-- b - второй (причем а и b могут получить nil,
-- если в качестве неявных параметров ничего не передано)
a,b,c = x, f() -- 2 результата из f()
a,b,c = f() -- 3 результата из f()
return f() -- возвращает все значения из f()
return ... -- возвращает все полученные неявные аргументы
return x,y,f() -- возвращает a, b и все, что возвращает f()
{f()} -- создает список со всем результатами вызова f()
{...} -- создает список со всеми неявными параметрами
{f(), nil} -- 1 результат из f()
Числа и символьные строки рассмотрены в разделе Лексические соглашения , переменные – в разделе Переменные ; описания функций – в разделе Объявление функций ; вызовы функций – в разделе Вызовы функций ; конструкторы таблиц – в разделе Конструкторы таблиц . Неявные аргументы, обозначаемые ’...’, могут использоваться только внутри соответственно заданной функции; см. Объявление функций .
К бинарным операциям (binop в формальном определении выражения) относятся арифметические (см. Арифметические операции ), операции сравнения ( Операции сравнения ), булевские ( Логические операции ) и операции конкатенации ( Конкатенация ). Унарными являются унарный минус ( Арифметические операции ), отрицание not ( Логические операции ) и операция получения длины # ( Получение длины ).
Результат вызова функций и неявные параметры могут содержать несколько значений. Если при этом они используются в качестве оператора ( Вызов функции ) (только для функций), то все возвращаемые значения отбрасываются. Если это последний (или единственный) элемент в списке выражений, то никакая корректировка не проводится (если вызов не взят в скобки). В остальных случаях Lua приводит возвращаемый список к одному элементу, отбрасывая все значения кроме первого.
Выражение, заключенное в скобки всегда возвращает только одно значение. Таким образом, (f(x,y,z)) всегда даст единственное значение, даже если f возвращает несколько. (Значение (f(x,y,z)) – это первое значение, полученное из f, или nil, если f не возвращает значений).