Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
lua的特点
- 轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
- 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
- 支持面向过程(procedure-oriented)编程和函数式编程(functional programming)
- 自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象
- 语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持
- 通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等
Lua的安装
linux下:
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install
mac 下:
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make macosx test
make install
lua的保留字、与数据类型
保留字:
- | - | - | - | - |
---|---|---|---|---|
and | break | do | else | elseif |
end | false | for | function | if |
in | local | nil | not | or |
return | then | true | until | while |
repeat |
支持的数据类型:
数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 |
boolean | ture or false |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
Lua的语法与使用
lua的语法十分简单,它执行直到错误的地方报错结束。
它支持交互式编程 使用lua -i 或者 lua 即可进入交互式编程。输入语句即可得到对应的结果
结束交互式编程可以使用control +c 或者 os.exit()
lua所有的变量默认是全局变量,如果想使用局部变量则需要local修饰
- lua的输出函数为print() ,语法非常简单它会将括号中的变量、字符串、数字等依次输出
print("变量a=",a,"变量b=",b)
- – 为单行数注释 --[[ 注释内容 ]]-- 为多行注释
字符串直接的连接使用"…" 例如:
print("aaa" .. "bbb")
- type可以获取变量的类型:例如
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进行比较的时候如果使用的是type的形式,则需要加上双引号或者单引号,否者不需要
print(type(x)) ->nil
print(type(x)==nil) ->false
print(type(x)=="nil") ->true
print(x==nil) ->true
print(x=='nil') ->false
- 字符串的长度可以用‘#’去获得:
print(#"hello") ->5
- table 的创建通过‘构造表达式完成’,最简单的是’{}’ 用来创建一个空表,可以直接初始化表,table是一个关联数组,数组的索引可以是数字或者字符串,lua的默认初始索引是1.table不会固定长度大小,在数据添加时会自动增加,没初始化的table都nil
table1={} 或者 table2={a,b,c,d} 或者 table3={key1=value1,key2=value2}
- 在lua中,函数被看作是’第一类值(First-Class Value)’,函数可以存储在变量里。function 可以以匿名函数(anonymous function) 的方式通过参数传递。定义方法使用function,方法体不需要使用括号,以end为结束 例如:
function testFun(tab,fun)
for k ,v in pairs(tab) do
print(fun(k,v));
end
end
tab={key1="val1",key2="val2"};
testFun(tab,
function(key,val)--匿名函数
return key.."="..val;
end
);
- 循环控制语句:for
for( var =1,10,2) -- 第三个参数是可选参数,默认1,表示每次循环增加的数
print(var)
end
- while循环:
num=1
while(true) do
num=num+1;
if(num==10)
then
break
end
print("hhhh,num =",num)
end
- repeat 循环:
a = 10
repeat
print("a的值为:", a)
a = a + 1
until( a > 15 )
- 流程控制语句 if 在if之后需要使用then
num=1
while(true) do
num=num+1;
if(num==10)
then
break
end
print("hhhh,num =",num)
end
-
运算符:
lua中不等于为 ~= 逻辑运算符中 非 为not 其余与其他语言相似 -
Lua中的数组 hash等都可以使用table进行代替,它的索引是从1开始的
-
Lua的迭代器:
常用的迭代器为pairs 或者 ipairs 。他们之间的区别为pairs会遍历所有的元素,而ipairs遇到nil就会停止。
list = {"a","b","c","d","e","f","g"}
for k , v in ipairs(list) do
print(k.. "=" ..v)
end
for k , v in pairs(list) do
print(k.. "=" ..v)
end
Lua的其他特性
- 模块与包
- 数据库的使用
- 协同程序
- 错误处理
- 垃圾回收
- 文件I/O
- 协同程序
Lua还有很多用法, 如上述所说。本人在学习redis的过程中看到Lua的用法,故前来简单学习。如果对其他特性感兴趣,请自行学习
Lua的API:
http://www.lua.org/manual/5.3/