lua之table
来源:互联网 发布:网络机顶盒怎么看电视 编辑:程序博客网 时间:2024/05/20 04:10
1、table是Lua中唯一的数据结构,其他语言所提供的数据结构都是通过table来实现的;
(1)在Lua中通过整数下标访问table中的元素,就是数组,并且数组的大小不是固定的,可以动态增长。
a = {} --新建一个table
for i = 1, 1000 do
a[i] = 0
end
给数组的每一个元素赋值,范围之外的元素为nil,在Lua中默认的下标是从1开始的,标准库中的方法都是以此为标准。
(2)在Lua中也可以通过key来访问和设置元素,同样用键值对来查询数据。
a = {}
a["name"] = "wahaha"
a["age"'] = 100
2、Lua中的集合和包也是通过table来实现的,将集合中的所有数据和方法放在一个统一的table中,根据table来取出
包中的数据
3、元表和元方法:metatable / metamethod
Lua中metatable可以允许我们改变table的行为,比如可以定义metatable来定义两个table的相加行为,Lua中的每一个表都有其metable,默认创建一个不带metatable
的新表
t1 = {}
getmetatable(t1) -- 获取元表
t1 = {}
setmetatable(t1,t2) --设置元表,t1的元表为t2
任何表都可以是其他一个表的元表,一组行为类似的表可以共享一个metatable来描述他们的共有行为。一个表也可以是自身的metatable来描述其自身的私有行为
对于每一个算数运算符,metatable都有对应的域名与其对应,__add、__mul、__sub、__div、__unm(负数)、__pow(幂)、__concat(连接行为)
Lua选择metatable的原则:如果第一个参数存在带有__add域的metatable,Lua使用它作为metatable作为metatable,和第二个参数无关,若第二个参数带有__add域的metatable,Lua使用它作为metatable否则报错。
对于关系运算发、Lua使用__eq等于、__lt小于、__le小于等于来作为元表
::针对表的不存在的域的查询和修改,Lua提供了改变table的行为的方法
(1)__index 元方法
当我们访问一个表的不存在的域,返回结果为nil,其实是先访问__index元方法,如果__index存在则由这个元方法来继续返回结果,类似于继承
__index既可以是一个函数,也可以是一个表,当用表来赋值__index时简单高效,去查找表中的域,当__index是一个函数时有更多的灵活性来实现多继承,隐藏和变异的机制。
(2)__newindex元方法
__newindex元方法用来对表更新,__index用来对表进行访问,当你对表中不存在的域赋值时,如果存在__newindex则调用此元方法,否则才进行赋值,
- lua之table学习
- Lua银弹之table
- lua之table
- Cocos2d-Lua之table
- Lua之table
- lua学习之table类型
- lua 之table方法concat
- lua学习之table类型
- Lua 之table的测试
- Lua基础之table详解
- lua table 之开销巨大
- lua学习之table类型
- Lua学习笔记之table
- Lua基础之table详解
- lua学习之table类型
- Lua基础之table(表)
- Lua之弱引用table
- lua之table.sort使用
- lua 与 c/c++ 交互(4)将lua作为一种配置文件
- 字母重排
- poj3071(概率dp)
- Python安装模块出错(ImportError: No module named setuptools)解决方法
- 异常的应用实例
- lua之table
- 简单易学的机器学习算法——岭回归(Ridge Regression)
- UVa 208 - Firetruck(DFS判连通+回溯)
- IMAC键盘和鼠标部分功能键失效原因
- 数组中出现次数超过一半的数字
- 转一篇vim配置python环境的文章
- 脚本学习 sed awk 写 pidfind 从 ps -x 找到进程名的pid
- 从微信的成功看移动AppUI设计的精髓
- 在网上搜代码, 搜到了个卡带机的效果, 做的很好, 我改成beyond的歌曲