Объявление функций

<< 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