<< Click to Display Table of Contents >> Navigation: Multi-Protocol MasterOPC Server > Руководство по языку Lua 5.1 > Язык и синтаксис > Выражения > Объявление функций |
Синтаксис объявления функций:
function (arguments)
funcbody --тело функции
end
Параметры функции (аргументы) фактически являются локальными переменными, которые инициализированы входными значениями.
В момент вызова функции длина списка передаваемых параметров приводится в соответствие спецификации, если это не фунkция с неопределенным количеством параметров. Для функций с неопределенным количеством параметров такая коррекция не проводится; все входные параметры попадают в функцию в виде нeoпpeдeлeннoгo выpaжeния, которое также обозначается с тремя точками. Значением этого выражения является список всех полученных входных параметров, как в случае множественного результата функции. Если нeoпpeдeлeннoe выpaжeниe используется внутри другого выражения или в середине списка выражений, то его значение-список урезается до одного элемента. Если это выражение стоит в конце списка выражений, урезания не происходит (если, конечно, вызов не заключен в круглые скобки).
Рассмотрим следующие объявления:
function f(a, b) end
function g(a, b, ...) end
function r() return 1,2,3 end
Пример отображения входных значений на параметры функции:
Вызов Параметры
f(3) a=3, b=nil
f(3, 4) a=3, b=4
f(3, 4, 5) a=3, b=4
f(r(), 10) a=1, b=10
f(r()) a=1, b=2
g(3) a=3, b=nil, ... --> (ничего)
g(3, 4) a=3, b=4, ... --> (ничего)
g(3, 4, 5, 8) a=3, b=4, ... --> 5 8
g(5, r()) a=5, b=1, ... --> 2 3
Результаты возвращаются из функции оператором return (см. Управляющие конструкции ). Если управление достигает конца функции, а оператор return не встретился, то функция завершается и ничего не возвращает.
Cинтakcиc c двoeтoчиeм ’:’ используется для определения мeтoдoв, т.е. функций, неявно получающих параметр self в качестве первого аргумента. Таким образом, выражение
function t.a.b.c:f (params) body end
аналогично
t.a.b.c.f = function (self, params) body end