文章目录
Lua本身支持动态数组,通过表(table)实现,它类似于Java中的ArrayList。Lua的表是灵活的数组和字典的混合体。对于栈的实现,我们可以简单地使用一个表来模拟。
这里是一个简单的Lua栈实现,它包含了push、pop、peek、isEmpty和getSize方法:
lua
local ArrayStack = {}
ArrayStack.__index = ArrayStack
function ArrayStack.new(capacity)
local stack = setmetatable({}, ArrayStack)
stack.data = {}
stack.capacity = capacity or 10 -- 默认容量
return stack
end
function ArrayStack:push(e)
table.insert(self.data, e)
end
function ArrayStack:pop()
if #self.data == 0 then
error("pop from empty stack")
end
return table.remove(self.data)
end
function ArrayStack:peek()
if #self.data == 0 then
error("peek from empty stack")
end
return self.data[#self.data]
end
function ArrayStack:isEmpty()
return #self.data == 0
end
function ArrayStack:getSize()
return #self.data
end
function ArrayStack:toString()
local res = "Stack: ["
for i, v in ipairs(self.data) do
res = res .. tostring(v) .. ", "
end
if #self.data > 0 then
res = res:sub(1, -3) -- 移除最后一个逗号和空格
end
res = res .. "] top"
return res
end
-- 使用示例
local stack = ArrayStack.new()
stack:push(1)
stack:push(2)
print(stack:toString()) -- 输出: Stack: [1, 2] top
print(stack:pop()) -- 输出: 2
print(stack:toString()) -- 输出: Stack: [1] top
Lua的表是动态数组,不需要手动扩容。
Lua的错误处理通常通过抛出错误(使用error函数)并捕获错误(使用pcall或xpcall)来实现。
Lua中没有泛型类型,因此所有类型都是动态的。这意味着你可以将任何类型的值放入表中,包括其他表。
Lua的table.insert和table.remove函数用于在表的末尾添加和删除元素,这与Java中的ArrayList行为相似。