1.Lua特性:
a.轻量级(小巧脚本语言、方便嵌入其他程序)
b.扩展性(可通过外部库扩展)
c.跨平台
d.支持面向过程编程、函数式编程
e.自动内存管理(只提供一种通用类型表-table)
f.语言内置模式匹配(closure、函数也是一种值、多线程支持-协同进程,并非系统所支持的线程)
g.通过closure和table可以支持面向对象编程
2.Lua基本语法(要点):
单行注释:
--
多行注释:
--[[
--]]
标识符:
最好不使用下划线加大写字母的标识符
21个关键词:
and break do else elseif end false for function if in local nil not or repeat return then true until while
注:一般约定以下划线加大写字符串的名字(如_VERSION)保留为Lua内部局部变量
全局变量:
a.默认情况下,变量总是全局的
b.全局变量不需要声明,且未初始化不会出错,但结果是nil
c.要删除一个全局变量,可将nil赋给该变量
3.Lua数据类型
nil boolean number string function userdata thread table
注:
a.string可以使用[[ ]]表示整块的字符串
b.字符串连接使用 ..
c.可用#计算字符串长度
d.table的创建可通过构造表达式来完成,最简单为{},创建空表,也可直接添加数据初始化
e.table可视为数组,数组索引可为数字或字符串,默认初始索引以1开始
f.table不会固定长度大小
g.function可存在变量里
h.协同程序与线程差不多,拥有独立的栈、局部变量、指令指针,可与其他协程共享全局变量等。但线程可以同时多个运行,但协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起时才会被暂停
i.在 Lua 中对 0(number) 进行逻辑判断,得到的结果是 true
4.Lua变量
a.Lua 中的变量全是全局变量,无论语句块或是函数里,除非用 local 显式声明为局部变量,变量默认值均为nil
b.Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量.
a, b = 10, 2*x <--> a=10; b=2*x
c.应该尽可能的使用局部变量(可避免命名冲突、速度更快)
5.Lua函数
a.函数支持同时返回多个值
b.函数可接受可变数目的参数
function add(...)
c.闭包函数是指将一个函数写在另一个函数之内,内部函数可以访问外部函数的局部变量。内部函数没有名称,通常也叫匿名函数
function newCounter()
local i = 0
return function()
i=i+1
return i
end
end
c1 = newCounter()
print(c1()) --> 1
print(c1()) --> 2
6.Lua运算符(要点)
a.逻辑运算-与或非:and or not
b.关系运算-不等于:~=
c.运算符优先级
从高到低的顺序:
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
7.table = 数组+映射(博客摘录)
1)数组
①a = {}
a[1]=1
a[2]=5
a[3]="hello"
print(a[1],a[2],a[3])
②a = {1,5,"hello"}
print(a[1],a[2],a[3])
这两种定义方式效果一样。
2)映射
类似于C语言中的map,[]里面的是key值。(数据库的table)
①a= {}
a["hello"]=2
a[3]=false
print(a.hello,a[3])
②a={["hello"]=2,[3]=false}
print(a.hello,a[3])
这两种定义方式效果一样。
8.迭代器之数组遍历:
for k,v in ipairs(t) do ... end
迭代器之Table遍历:
for k,v in pairs(t) do ... end
资料参考:
https://blog.youkuaiyun.com/u013047859/article/details/51232768(Lua核心编程之基础)
https://blog.youkuaiyun.com/u013047859/article/details/51234245(Lua核心编程之进阶&总结)
https://blog.youkuaiyun.com/xuzhonghai/article/details/7297560(大体了解Lua的语法)