Lua 对象操作指令
Gaia 框架为 Lua 后端提供了完整的对象操作指令集,用于表操作、元表和面向对象编程。
表操作
表创建
lua
-- Gaia 代码
local tbl: table = {}
local arr: table = {1, 2, 3, 4, 5}编译为 Lua 字节码:
lua
-- 生成的 Lua 代码
local tbl = {}
local arr = {1, 2, 3, 4, 5}表字段访问
lua
-- Gaia 代码
local value = tbl.key
local item = arr[1]表字段赋值
lua
-- Gaia 代码
tbl.name = "Lua"
tbl[1] = "first"表操作指令
创建表
lua
-- Gaia 代码
NEW_TABLE result获取表字段
lua
-- Gaia 代码
GET_TABLE table key result设置表字段
lua
-- Gaia 代码
SET_TABLE table key value表长度
lua
-- Gaia 代码
GET_LEN table result元表操作
设置元表
lua
-- Gaia 代码
local mt: table = {
__add = function(a, b) return a.value + b.value end,
__tostring = function(obj) return "Object: " .. obj.name end
}
setmetatable(obj, mt)获取元表
lua
-- Gaia 代码
local mt: table = getmetatable(obj)元方法定义
lua
-- Gaia 代码
local mt: table = {
__index = function(table, key)
return rawget(table, "_" .. key)
end,
__newindex = function(table, key, value)
rawset(table, "_" .. key, value)
end
}面向对象编程
类定义
lua
-- Gaia 代码
local Person = {}
Person.__index = Person
function Person:new(name: string, age: int)
local obj = {}
setmetatable(obj, Person)
obj.name = name
obj.age = age
return obj
end
function Person:greet(): string
return "Hello, I'm " .. self.name
end继承实现
lua
-- Gaia 代码
local Student = {}
Student.__index = Student
setmetatable(Student, Person)
function Student:new(name: string, age: int, grade: int)
local obj = Person:new(name, age)
setmetatable(obj, Student)
obj.grade = grade
return obj
end对象操作指令
创建对象
lua
-- Gaia 代码
NEW_OBJECT class_name result方法调用
lua
-- Gaia 代码
CALL_METHOD obj "method_name" arg1 arg2 result字段访问
lua
-- Gaia 代码
GET_FIELD obj "field_name" result字段赋值
lua
-- Gaia 代码
SET_FIELD obj "field_name" value高级表操作
表遍历
lua
-- Gaia 代码
for key, value in pairs(tbl) do
print(key, value)
end
for index, value in ipairs(arr) do
print(index, value)
end表连接
lua
-- Gaia 代码
local combined: table = {}
for i, v in ipairs(arr1) do table.insert(combined, v) end
for i, v in ipairs(arr2) do table.insert(combined, v) end表排序
lua
-- Gaia 代码
local sorted: table = {table.unpack(arr)}
table.sort(sorted, function(a, b) return a < b end)内存管理
弱引用表
lua
-- Gaia 代码
local weak_table: table = {}
setmetatable(weak_table, {__mode = "kv"}) -- 键和值都是弱引用对象池
lua
-- Gaia 代码
local ObjectPool = {
pool = {},
acquire = function(self)
if #self.pool > 0 then
return table.remove(self.pool)
else
return self:create_new()
end
end,
release = function(self, obj)
self:reset(obj)
table.insert(self.pool, obj)
end
}性能优化
表预分配
lua
-- Gaia 代码
local tbl: table = {}
tbl.size = 100 -- 预分配提示避免表创建
lua
-- 推荐:重用表
local function process()
local temp = {}
-- 使用 temp
end
-- 避免:频繁创建
local function process()
local temp = {a = 1, b = 2} -- 每次调用都创建新表
-- 使用 temp
end使用局部变量缓存
lua
-- Gaia 代码
local t = some_table
local v1 = t.field1
local v2 = t.field2
-- 使用 v1, v2 而不是重复访问 t.field1, t.field2最佳实践
- 使用局部变量: 避免重复的全局表访问
- 预分配表: 当知道大小时预分配表
- 重用对象: 使用对象池模式
- 合理使用元表: 不要过度使用元方法
- 类型注解: 使用类型注解提高代码可维护性