Раздел: CronosPRO Дата редакции: 12.07.2013 id статьи: 1542

Вызов функций в Lua

Вызов функции состоит из имени переменной, содержащей ссылку на функцию, и заключённого в круглые скобки списка аргументов (возможно, пустого).
a = f(2,3) -- вызов функции f с двумя аргументами: 2 и 3
           -- возвращаемое функцией значение помещается в переменную a
Если функции передаётся только один аргумент, и этот аргумент является строковой константой или конструктором таблицы, круглые скобки при вызове функции можно не использовать.
require "myscript" -- то же самое, что и require ("myscript")
MsgBox [[Это многострочное значение]] -- то же самое, что и MsgBox([[Это многострочное значение]])
render {x=1, y=2} -- то же самое, что и render({x=1, y=2})
Ссылка на функцию может быть полем таблицы. В этом случае вызов функции будет выглядеть так:
t.f() -- вызов функции, на которую ссылается поле f таблицы t
В Lua имеется возможность вызова функции в объектно-ориентированном стиле:
t:f() --эквивалентно t.f(t)
Таким образом, конструкция t:f() вызывает функцию, на которую ссылается поле f таблицы t, и эта же таблица передаётся в функцию в качестве неявного первого аргумента.
В качестве аргументов функция может принимать несколько значений. Если при вызове функции последние значения не заданы, им присваивается nil. Если значений больше, чем аргументов, «лишние» значения отбрасываются. Аргументы функции являются локальными переменными внутри функции.
function f(x, y) -- определение функции
   MsgBox ("x="..tostring(x).."; ".."y="..tostring(y))
end
f() -- вызов функции. x, y равны nil
f(1) -- вызов функции. x = 1, y равен nil
f(1, 2) -- вызов функции. x = 1, y = 2
f(1, 2, 3) -- вызов функции. x = 1, y = 2, 3 - лишний параметр