函式 (function) 將某段程式碼區塊包裝起來,並給予命名,該程式碼區塊就成為一個有意義的實體。函式可以重覆再利用,也是物件導向和模組的基礎。本文介紹函式本身,其他概念留至後文介紹。
建立函式
使用 function
保留字可建立函式。以下程式建立一個簡單的函式,並重覆呼叫三次:
function hello()
print("Hello World")
end
hello()
hello()
hello()
這個函式既沒有參數,也沒有回傳值,實務上這樣的函式實用性較低。
在函式中使用參數 (Parameters)
我們可以透過傳入參數 (parameters) 調整函式的行為,如下例:
function hello(name)
print("Hello " .. name)
end
hello("Michelle")
hello("Jenny")
hello("Tom")
從函式回傳值
除了傳入參數外,函式也可以回傳值 (returning values),如下例:
function add(n)
return n + 1
end
assert(add(3) == 4)
Lua 的函式允許多個回傳值,如下例:
function divmod(a, b)
return math.floor(a / b), a % b
end
local a, b = divmod(7, 3)
assert(a == 2)
assert(b == 1)
不定參數函式
Lua 的函式可傳入任意個參數,如下例:
function sum(...)
local s = 0
for i, e in ipairs{...} do
s = s + e
end
return s
end
assert(sum(1, 2, 3, 4, 5) == 15)
以表 (table) 做為函式的參數
若我們將表做為參數,我們可以將參數其中的細項命名,如下例:
function rename(arg)
os.rename(arg.old, arg.new)
end
rename{old="old.txt", new="new.txt"}
這樣的好處在於不用寫死參數位置,當參數較多時易於記憶。