第一章
特殊字符
and break do else elseif end false for function if in local nil not or repeat return then true until while
注释:
--
--[[
something
--]]
表达式
逻辑运算符:
and or not (and 优先级高于not)
not : !
and : &&
or : ||
连接运算符:
.. 把数字转化成字符串连接
table
数组:
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
字典:
a = {x=0, y=0} <--> a = {}; a.x=0; a.y=0
函数list
tab = {sin(1), sin(2), sin(3), sin(4), sin(5),sin(6), sin(7), sin(8)}
随意自由,啥都能存
语法
赋值 :
a, b = 10, 2*x <--> a=10; b=2*x
局部变量
尽可能使用局部变量的好处
1 避免命名冲突
2 访问局部变量比全局变量快
代码块:
do end
ifelse
第二章
数组 | 起点可以是任意数字index 一般标准的是从1开始 遍历, 键值对存在情况: 1 有序的, key排序 , ipairs 2 无序的, pairs |
矩阵和多维数组 | for循环嵌套创建 稀疏性是什么? |
链表 | next, value属性 |
队列和双向队列 | 两个头尾的索引下表 first 。 last 给左边添加 first -- 给右边添加 last++ |
集合和包 | 没看明白,过滤字符? |
字符串缓冲 | 普通读取文件中的文字 io.lines效率很低(一分钟读取350kb文件) lua中使用io.read(*all) ( 350KB 的文件需要0.02s) Lua 使用真正的垃圾收集算法,但他发现程序使用太多的内存他就 会遍历他所有的数据结构去释放垃圾数据,一般情况下,这个算法有很好的性能(Lua 的快并非偶然的) 字符串缓存 错误做法:使用io.line buff = buff.. line"\n" 一个buff是50kb, 一个line是20bytes 创建的新的buff = 500020bytes 之前的buff和line就属于没有用的垃圾了 当两个老的数据包(也就是没有用的数据)大小超过100kb的话, lua就会自动进行垃圾回收 这样如果行数很多的话,那么就会回收多次垃圾,内存也会变大 解决办法 使用io.read 采用的核心算法是: 栈 , 栈的底部用来保存大的字符串,小的入栈。当判断当前层的字符串大小大于相邻的地下一层的字符串大小的时候,就进行合并,一直到没有能合并的 两个小串合成一个大串,大串在合并成更大的串 |
面向对象程序设计 | 类 | 设置元表 |
继承 | 当前类没有的方法会去metatable中找,还找不到再在父类找 继承可以重新定义父类 继承的写法 在子类中,掉用父类的接口,实际上是把子类的self传给了父类,父类在接口中实现的时候, 其实拿的是子类的self | |
多重继承 | | |
私有性 | 基本思想: 每一个对象用两个表示, 一个是用来状态描述, 一个是用来描述操作(有点像属性) 给table包了一层,用来实现一系列操作 | |
Single-Method对象实现方法 | 对象只有单一的方法
|
weak表 | lua自动进行内存管理 | 通过垃圾收集技术, lua会自动删除失效的对象。 不回收 的情况: 1 有一个数组和指向栈顶的索引构成,有用的只有顶部的那一个数据, 但是lua不这么认为。如果通过出栈操作提取一个数组元素, 那么栈中其他部分,对lua来说仍然是有效的 2 全局变量,即使没有用, 也不是会被回收的 3 收集器中的内容不会被回收,即使没有指针指向它。 weak表是一种用来告诉lua一个引用不应该防止对象被回收的机制。就是让他回收吧 对象的引用指向的weak, 对象将被收集, weak的引用也会被删除 |
table库 | table库的作用: 1 对lua中的array的大小给一个解释 2 提供list中插入删除元素的函数 3 对array函数进行排序 |
: 和 . 区别