Выражения

<< 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 не возвращает значений).