Lua table深度解析:基础知识与库函数应用
47 浏览量
更新于2024-09-02
收藏 53KB PDF 举报
"Lua table类型学习笔记"
Lua中的table类型是一种非常灵活的数据结构,它不仅可以作为数组使用,还能作为关联数组或者字典,甚至用于实现面向对象编程。在Lua中,table是唯一的复合类型,它的强大之处在于可以用任意类型的值作为索引(除了nil),并且存储的元素也可以是任意类型。
### 基础知识
1. **数组与关联数组**:在Lua中,table既可以像C语言中的数组一样使用正整数作为索引,也可以用字符串、数字或者其他任何非nil值作为索引,形成关联数组。例如:
```lua
tt = {"hello", 33} -- 数字索引的数组
tab = {["flag"] = nil, key = value} -- 关联数组
```
2. **索引的表示**:所有索引值必须用方括号`[]`包围,字符串索引可省略引号和方括号。例如:
```lua
tab = {["hello"] = "world"} -- 字符串索引
tab = {hello = "world"} -- 省略方括号的字符串索引
```
3. **默认索引**:如果不指定索引,数字索引会从1开始自动增加。例如:
```lua
tab = {value1, value2} -- 等价于 tab = {[1] = value1, [2] = value2}
```
### 库函数
Lua标准库提供了几个用于操作table的函数,如`table.concat`, `table.insert`, `table.remove`, `table.foreachi`, `table.foreach`等,它们方便地扩展了table的功能。
- `table.concat(table, separator)`:将table中的元素连接成一个字符串,可选参数separator用于分隔元素。
- `table.insert(table, [pos], value)`:在table的指定位置(默认为末尾)插入一个值。
- `table.remove(table, [pos])`:从table中删除指定位置的元素并返回它,位置默认为末尾。
- `table.foreachi(table, function)` 和 `table.foreach(table, function)`:遍历table,对每个元素执行传入的函数,前者按索引顺序,后者按键值对遍历。
### 面向对象编程
Lua不提供内置的面向对象机制,但可以通过table和元表实现模拟。类可以是一个table,对象是类的实例,方法是存储在类table中的函数。例如:
```lua
Person = {name = "John"}
Person.sayHello = function(self)
print("Hello, my name is " .. self.name)
end
p = Person -- 创建一个实例
p.name = "Jane" -- 修改属性
p.sayHello() -- 调用方法
```
### 注意事项
- 索引值为nil的元素不会被存储在table中。
- 变量作为索引时,其值的变化会影响table的访问,如示例所示:
```lua
temp = 1
tab = {[temp] = 1, 11}
temp = 2 -- 改变temp的值
print(tab[temp]) -- 结果为11,因为temp的值改变后,之前的索引失效
```
Lua的table类型是其灵活性和强大功能的核心,无论是作为数组、字典,还是实现面向对象编程,都能满足各种需求。理解和熟练使用table,对于掌握Lua编程至关重要。
2020-09-22 上传
2021-04-17 上传
2020-11-18 上传
2019-03-05 上传
2020-09-22 上传
2020-09-22 上传
2018-03-12 上传
2019-07-31 上传
weixin_38682406
- 粉丝: 5
- 资源: 910
最新资源
- SQLI--LABS-WRITE-UPS
- AIOrqlite-0.1.4-py3-none-any.whl.zip
- flutter-notes:使用Flutter UI工具包以Dart编写的简单&美丽笔记记录应用程序
- 欧瑞伺服(源码+按键板+功率板+控制板+FPGA).zip
- VC++在对话框中加载菜单
- DCAT-AP-SE:DCAT-AP-SE项目
- LTCA 2020 中文手册.rar
- P4-油漆b-sico
- jquery.Storage:一个 jQuery 插件,使 localStorage 易于使用且易于管理
- Perovo_symbols:探洞俱乐部Perovo使用带有自定义符号Therion和TopoDroid的存储库
- AIPipeline-2019.9.12.19.2.19-py3-none-any.whl.zip
- Android-EatIt:这是我的第一个应用程式android
- smartcoin-prestashop:PrestaShop 的 Smartcoin 插件
- VC++使用SkinLoad.dll美化窗体的实例
- burger-app:React应用程序用于动态构建和订购汉堡
- AISTLAB_nitrotyper-0.6.10-py2.py3-none-any.whl.zip