代码改变世界

Lua学习笔记一

2016-12-04 17:46  撞破南墙  阅读(420)  评论(0编辑  收藏  举报

 

 

学习了有一周多了。之前一直不想献丑,但还是记录下这个过程。

第1章  开发软件搭建

1. ubuntu lua安装

 sudo apt-get install lua5.1

2.win下的环境搭建。

  我选择的是Lua For Windows。一键安装。保存为LUA格式即可运行

    预计在Linux下 开发工具 用 sublime_text,实际使用notepadqq,个人喜好无所谓。

 

第1章  语法学习

 

1.1  语法学习

 

Lua -i filename 开启调试。

 

dofile (filename.lua)  -- 加载程序集

 

_word 语法。系统标识符

   

注释: --[[   --]]

 

 

Nil特殊值,空

 

删除全局变量 赋值nil

 

转义字符 P11

 

 

 

 

 

1.2  笔记,类型与值

 

Nil boolean number string

 

Table 实质是一个对象,userdata thread

 

 

 

A[name]   等同于  A.name

 

长度操作符#

 

 

 

1.3  表达式

 

字符串连接:   “..

 

操作符优先级 P22.

 

 

 

1.4  语句

 

新鲜的赋值玩法

 

X,y=y,x

 

奇怪的本地变量加速法

 

Local foo=foo --将全局变量赋值给本地变量使得访问速度提高

 

1.If then .. Elseif .. end

 

2. While .. Do .. End

 

3. Repeat

 

4.For

 

a)For start,end,step do ..end

 

b)泛型 For i,v inpairs(a) do print(v) end

 

1.5  函数

 

1.函数的参数需要用括起来,除非是 单个字符串或table构造表达式的参数

 

2.Function functionname(par)   --body    end

 

3.允许一个函数多个返回值

 

4.Return 后不用括号,否则可能会误解P38

 

5.变长参数 function add {...}

 

6.具(命)名实参,named arguments 通过对象及其属性实现。(避免出错)

 

 

 

1.6  深入函数

 

1.函数是一种第一类值 first-clas value。 函数可以看作是 一个变量,函数名=变量名,函数体=函数内容。类似lisp

 

2.概念:非局部的变量。非每次都临时创建,而是在其生命周期范围内的“全局”。闭包?

 

3.尾调用。

 

 

 

1.7  章迭代器与泛型for

 

未细看。参考lispC#中的迭代器。估计是类似的。

 

第八章编译执行与错误

 

第九章协同程序(多线程编程)

 

类似线程。Coroutine

 

Coroutine create 创建

 

一个协同程序的4个状态  spended running dead normal

 

 

 

挂起 coroutine.yield()  恢复 coroutine.resume(something)

 

 

 

1.8  Lua如何实现面向对象

 

= table

 

类的函数  =  table下的一个字段

 

类的私有函数    = function 下加关键字 selef

 

继承 = 每个lua下新new的对象本身也可以作为一个继承后的类

 

 

 

B作为a的原型,

 

Set meta table (a,(__index = b))

 

 

 

多重继承:使用table记录多个基类

 

Private私有性:lua本身没有提供private的机制,他定位在中小型。

 

Single-method 静态方法?

 

1.9  弱引用 weak table

 

通过元表中的__mode字段决定。K->key是弱引用 V->value是弱引用。

 

弱引用会被回收掉。

 

1.9.1  备忘录函数(缓存)

 

空间换时间。弱引用应用与此很合适。

 1.10  重要库table的使用

  

Insert  Remove  Sort  Concat

   

1.11  字符串库

  

Lua的匹配不使用正则,自定义一套。

  

   

第1章   小结

1.容错舍弃思想:若参数不够则放置为nil,多了则舍弃。适用于函数的参数,数组等的赋值。

2. Lua 来讲,语言的特性主要指用 table 表示所有的东西,用 metamethod 做出优雅的解决方案。还有 coroutine [摘自LUA作者的话]

 3.无视章节编号。然后书是参考lua程序设计第二版。基本上直接看书想睡觉