一 Lua简介
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua特性:
1.轻量级:用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
2.可扩展:提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
3.支持面向过程编程和函数式编程
4.自动内存管理:只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象
5.语言内置模式匹配:闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;
二 环境配置
环境下载地址:lua
安装之后在命令行输入:
lua -i
出现以上运行结果则证明配置成功!
可以直接在里面执行lua代码,也可以使用 lua xx.lua运行脚本!
三 基本语法
1)注释
– 单行注释(两个减号)
–[[ 多行注释 ]]–
2)关键字
lua保留关键字不能作为常量或变量或其他用户自定义标示符:
and
break
do
else
elseif
end
false
for
function
if
in
local
nil
not
or
repeat
return
then
true
until
while
goto
3)连接符
..
print("X".."Y")
--XY
4)计算字符串长度
#
print(#"hello")
--5
5)赋值
1.多个变量赋值
a,b=1,2,3
c,d,e=1,2
print(a.."-"..b)
print(c.."-"..d.."-"..e)
--1-2
--1-2-nil
2.交换
a,b=3,4
print(a.."-"..b)
a,b=b,a
print(a.."-"..b)
--3-4
--4-3
四 Lua数据类型
Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回
Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。
数据类型 | 描述 |
---|---|
nil | 只有值nil属于该类,表示一个无效值(在条件表达式中相当于false) |
boolean | 包含两个值:false和true |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type(type(X))) --> string
nil
nil类型表示一种没有任何有效值,只有一个值:nil
print(x)
--nil
对于全局变量和 table,nil 还有一个"删除"作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉。
代码示例:
tab1 = { key1 = "val1", key2 = "val2", key3="val3" }
for k, v in pairs(tab1) do
print(k .. " - " .. v)
end
tab1.key1 = nil
for k, v in pairs(tab1) do
print(k .. " - " .. v)
end
x=10
print("删除前x=",x)
x=nil
print("删除后x=",x)
输出结果为:
key1 - val1
key3 - val3
key2 - val2
key3 - val3
key2 - val2
删除前x= 10
删除后x= nil
bool
boolean 类型只有两个可选值:true 和 false,Lua 把 false 和 nil 看作是 false,其他的都为 true,数字 0 也是 true
if 0 then
print("0 is true")
else
print("0 is false")
end
if type(x) then
print("type(x) is string")
else
print("type(x) is nil")
end
print(type(type(x)))
--0 is true
--type(x) is string
--string
number
Lua 默认只有一种 number 类型 ,整型和浮点型均为number类型
print(type(1))
print(type(1.111))
--number
--number
string
lua的字符串类型用单引号/双引号/2个方括号表示
t1="hello"
t2='hell0'
t3=[[hello]]
table
table 的创建通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。也可以在表里添加一些数据,直接初始化表
tab={"Tom","Lili","Jon"}
for k,v in ipairs(tab) do
print(k,"--",v)
end
tab2={key1=18,key2=22,key3}
for k,v in pairs(tab2) do
print(k,"--",v)
end
输出结果为:
1 -- Tom
2 -- Lili
3 -- Jon
key1 -- 18
key2 -- 22
thread
Lua最主要的线程是协同程序(coroutine)。
它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。