函数

函数(Function)是 Lua 中的 一等公民(First-class value)

可以赋值给变量、作为参数传递或作为返回值返回。

这让 Lua 拥有极高的灵活性与函数式编程能力。

🧩 定义与调用函数

-- 定义函数
function greet(name)
  print("你好," .. name .. "!")
end

-- 调用函数
greet("Lua")

`

Lua 中函数定义使用关键字 function,以 end 结束。

🧮 返回值

函数可以返回一个或多个值。

function add(a, b)
  return a + b
end

function divmod(a, b)
  return math.floor(a / b), a % b
end

print(add(3, 5))           -- 输出 8
local q, r = divmod(10, 3) -- 多返回值
print(q, r)                -- 输出 3 1

🧰 局部函数与全局函数

function globalFunc()
  print("这是全局函数")
end

local function localFunc()
  print("这是局部函数")
end

建议使用 local 定义函数,避免污染全局作用域。

🧑‍🤝‍🧑 函数作为变量

函数可以赋值、存入表中、或作为参数传递:

local function sayHello()
  print("Hello Lua")
end

local f = sayHello
f()  -- 调用变量函数

🔁 匿名函数与回调函数

Lua 支持匿名函数,可作为回调函数使用。

function operate(a, b, func)
  return func(a, b)
end

print(operate(5, 3, function(x, y)
  return x * y
end))

🔄 可变参数函数

使用 ... 表示可变参数。

function sum(...)
  local total = 0
  for _, v in ipairs({...}) do
    total = total + v
  end
  return total
end

print(sum(1, 2, 3, 4))  -- 输出 10

🧠 递归函数

Lua 支持递归函数定义。

function factorial(n)
  if n == 0 then
    return 1
  else
    return n * factorial(n - 1)
  end
end

print(factorial(5))  -- 输出 120

🧠 小结

  • 使用 function ... end 定义函数
  • 支持多返回值与可变参数
  • 函数是 一等公民,可赋值、传递与返回
  • 推荐使用 local 定义函数,避免全局污染