lua基础, lua学习

第一章

特殊字符

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函数进行排序

: 和 . 区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值