Lua 函数和方法指令
Gaia 框架为 Lua 后端提供了完整的函数定义、调用和方法操作指令集。
函数定义
基本函数定义
lua
-- Gaia 代码
function add(a: int, b: int): int
return a + b
end编译为 Lua 字节码:
lua
-- 生成的 Lua 代码
local function add(a, b)
return a + b
end局部函数定义
lua
-- Gaia 代码
local function multiply(x: int, y: int): int
return x * y
end匿名函数
lua
-- Gaia 代码
local square = function(x: int): int
return x * x
end函数调用指令
直接调用
lua
-- Gaia 代码
CALL add 5 3 result间接调用
lua
-- Gaia 代码
CALL_VAR func_obj arg1 arg2 result方法调用
lua
-- Gaia 代码
CALL_METHOD obj "method_name" arg1 arg2 result参数处理
固定参数
lua
-- Gaia 代码
function greet(name: string, age: int): string
return "Hello " .. name .. ", age: " .. age
end可变参数
lua
-- Gaia 代码
function sum(...): int
local total: int = 0
for i: int = 1, #arg do
total = total + arg[i]
end
return total
end默认参数
lua
-- Gaia 代码
function greet(name: string, greeting: string = "Hello"): string
return greeting .. " " .. name
end返回值处理
单返回值
lua
-- Gaia 代码
function get_value(): int
return 42
end多返回值
lua
-- Gaia 代码
function get_coords(): (int, int)
return 10, 20
end返回指令
lua
-- Gaia 代码
RETURN value
RETURN_MUL value1 value2闭包和词法作用域
闭包定义
lua
-- Gaia 代码
function make_counter(): function
local count: int = 0
return function(): int
count = count + 1
return count
end
end上值操作
lua
-- Gaia 代码
CLOSURE proto_id upvalue1 upvalue2 result
GET_UPVALUE closure index result
SET_UPVALUE closure index value尾调用优化
尾调用
lua
-- Gaia 代码
function factorial(n: int, acc: int = 1): int
if n <= 1 then
return acc
else
return factorial(n - 1, n * acc) -- 尾调用
end
end尾调用指令
lua
-- Gaia 代码
TAIL_CALL func arg1 arg2函数表和元方法
函数表
lua
-- Gaia 代码
local operations: table = {
add = function(a: int, b: int): int return a + b end,
sub = function(a: int, b: int): int return a - b end,
mul = function(a: int, b: int): int return a * b end,
div = function(a: int, b: int): float return a / b end
}元方法定义
lua
-- Gaia 代码
local mt: table = {
__add = function(a, b)
return a.value + b.value
end
}性能优化
局部函数优化
lua
-- 推荐:使用局部函数
local function fast_function()
-- 函数体
end
-- 避免:全局函数
function slow_function()
-- 函数体
end内联优化
对于简单的函数,考虑手动内联:
lua
-- Gaia 代码
-- 原始函数
function add(a: int, b: int): int
return a + b
end
-- 内联版本(手动优化)
local result: int = a + b -- 直接计算,避免函数调用最佳实践
- 使用局部函数: 提高访问速度
- 减少函数调用开销: 合并简单操作
- 合理使用尾调用: 避免栈溢出
- 避免过度嵌套: 保持代码清晰
- 类型注解: 提高代码可读性和可维护性