Lua核心编程之进阶&总结
来源:互联网 发布:mac 照片所在文件夹 编辑:程序博客网 时间:2024/04/26 20:12
1、Metatable
1)metatable是用来定义一个table的行为的table。
2)table默认行为可以进行遍历,但table不能相加, metatable允许改变默认行为。
3)Lua中每个table都可以有meltable
4)新表默认是不带metatable的
测试:
t = {} print(getmetatable(t)) --> nil
5)任何表可是其它表的metatable, 一组相关表可以共享一个metatable, 个表也可以是自身的metatable。
测试:
t1= {}setmetatable(t, t1) assert(getmetatable(t) == t1)个人觉得这里很难理解,找到一个详细的博客 http://www.jb51.net/article/56690.htm
2、metamethods用途
Lua为table的metatable提供一组预定义操作函数,
这些函数叫metamethods。 当执行table某些操作的时候,会去寻找table中是否有
这个操作对应的metamethods,如果有执 函数并返 回结果,否则操作报错。
local mt = {}function mt.__add(a, b) return 'table + ' .. bendlocal t = {}setmetatable(t, mt)print(t + 1)
每个算术操作符有对应的 metamethod:
+__add*__mul-__sub/__div-__unm (for negation)%__mod^__pow对于连接操作符有对应的 metamethod:__concat
同样,对于关系操作符也都有对应的 metamethod:
==__eq<__lt<=__le其他的关系操作符都是用上面三种表示:
a ~= b 表示为 not (a == b)
a > b 表示为 b < a
a >= b 表示为 b <= a
和算术运算符不同的是,关系运算符用于比较拥有不同的 metamethod(而非 metatable)的两个 value 时会产生错误,例外是比较运算符,拥有不同的 metamethod 的两个 value 比较的结果是 false。
不过要注意的是,在整数类型的比较中 a <= b 可以被转换为 not (b < a),但是如果某类型的所有元素并未适当排序,此条件则不一定成立。例如:浮点数中 NaN(Not a Number)表示一个未定义的值,NaN <= x 总是为 false 并且 x < NaN 也总为 false。
3、封装、多态、继承。这些体现出Lua语言的面向对象的高级特性了。
4、系统库
1)数值与字符串的转化:
a = tonumber("3.14")a = tostring(3.14)
2)字符串格式化:
print(string.format("hi %d", 2))
3)table的方法。
local t = {}for i = 1,10 dotable.insert(t,i)endtable.remove(t,2)for k,v in pairs(t) doprint(k,v)end
4)映射 table.key
local t = {}t.a = 1t.b = 2t.a = nil --删掉a的映射for k,v in pairs(t) doprint(k,v)end
5、总结:
1)买一送二之:
table=数组+映射
2)程序员从0开始,大众习惯从1开始
数组下表从1开始,连续使用,自动扩展
3)万物皆值:
函数也是一种值
4)凭什么C语言只能返回1个?
函数支持多返回参数
5)逻辑运算就是说英文:and or not
字符串连接用 ..
local 大法好:优化,作用域控制
6)迭代器之数组遍历: for k,v in ipairs(t) do ... end
迭代器之Table遍历:for k,v in pairs(t) do ... end
- Lua核心编程之进阶&总结
- Lua核心编程之基础
- 《Cocos2d-x之Lua核心编程》读书笔记:Lua基础
- Lua 基础之函数进阶
- Lua编程总结
- Lua编程总结二
- ADO编程 核心总结
- windows核心编程 总结
- Python核心编程总结
- python核心高级学习总结6------面向对象进阶之元类
- Lua 编程之: 与 .
- lua编程总结(转 参考)
- Lua进阶
- Lua学习之metatable总结
- Lua学习之coroutine总结
- 《windows核心编程》之精华
- Jquery编程之核心函数
- Windows 核心编程之进程
- UVA_11137_Ingenuous Cubrency
- 计蒜客 11066 A letter from Chensg
- popupwindow 显示和消失的动画
- java对象排序
- 非计算机科班出身,如何成为一名技术牛人?
- Lua核心编程之进阶&总结
- ActionBar的使用
- Aspose.words合并文档、邮件合并功能
- 面试:数组:合并区间:058
- zcmu1727
- php在记事本中换行的问题
- 4521: [Cqoi2016]手机号码|数位DP
- IOS开发中可能会遇到的那点事。。。(持续更新)
- 计算该日在本年中是第几天