Luaの関数はファーストオブジェクトである。
これは関数を変数に代入したり、関数を戻り値として返すことができることを意味する。
関数を定義するための基本構文は以下のようになる。
function 関数名(引数) 処理 end
Luaでは、関数定義の引数の個数と、呼び出し時の引数の個数が違ってもエラーにならない。
実引数が多い場合は、多い分捨てられ、実引数が足りない場合はnilが代入される。
戻り値がある場合は キーワード return を使い以下のようにする。
戻り値がない場合はなにも記述しなくてよい。
function 関数名(引数) 処理 return 戻り値 end
Luaでは、複数個の戻り値を返すことが可能である。
複数個の値を返す場合は、return の後の値をカンマで区切る。
複数個の戻り値を複数個の変数に変数に代入する場合は変数をカンマで区切る。
function f() return 1, 2, 3 end a,b,c = f() print(a, b, c)
可変個の引数を取る関数を定義したい場合、... を使い以下のようにする。
function 関数名(...) 処理 end
... は引数の最後であればよく、関数名(a, b, ...)と記述してもよい。
受け取った値は ... という特殊な名前の変数で参照することができる。
function f(...) t = {...} -- 受け取った引数をテーブルに代入 -- 受け取った値をすべて表示 for value in pairs(t) do print(value) end end f(1, 2, 3, 4, 5)