学不可以以已
最近自己写项目的时候用到了lua,以此写一下。
Linux下安装Lua环境
# 安装lua需要的目录依赖
yum install libtermcap-devel ncurses-devel libevent-devel readline-devel
# 安装lua环境
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz #
# 解压文件
tar zxf lua-5.3.5.tar.gz
# 移动到目标目录
cd lua-5.3.5
# 创建测试文件
make linux test
# 测试是否安装成功
[root@localhost ~]# lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
成功!!
入门程序
创建hello.lua文件,内容为:
编辑文件hello.lua
vi hello.lua
内容为:
print(“hello”);
执行命令:
lua hello.lua
LUA的基本语法
Lua有2种编程模式:一种是交互式编程,使用命令lua -i
lua -i
另一种是脚本式编程,即创建一个XXXX.Lua脚本
注释
单行注释,2个-
–
多行注释
–[[
多行注释
多行注释
–]]
定义变量
– 全局变量赋值
a=1
– 局部变量赋值
local b=2
变量的初始值为nil
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 的创建是通过“构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。 |
流程控制
(1)if语句
if(布尔表达式)
then
–[ 在布尔表达式为 true 时执行的语句 --]
end
(2)if…else语句
if(布尔表达式)
then
–[ 布尔表达式为 true 时执行该语句块 --]
else
–[ 布尔表达式为 false 时执行该语句块 --]
end
实例:
– 定义变量
a = 100;
– 检测条件
if (a < 20)
then
print(“a 小于20”);
else
print(“a 大于 20”);
end
循环
(1)while循环
while(condition)
do
statements
end
(2)for循环
语法: 1->10 1:exp1 10:exp2 2:exp3:递增的数量
for var=exp1,exp2,exp3
do
<执行体>
end
(3)while do
repeat
statements
until( condition
函数
–[[ 函数返回两个值的最大值 --]]
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
– 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))
表
– 初始化表
mytable = {}
– 指定值
mytable[1]= “Lua”
– 移除引用
mytable = nil
模块
(1)模块定义
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
– 文件名为 module.lua
– 定义一个名为 module 的模块
module = {}
– 定义一个常量
module.constant = “这是一个常量”
– 定义一个函数
function module.func1()
print(“这是一个公有函数”)
end
local function func2()
print(“这是一个私有函数!”)
end
function module.func3()
func2()
end
return module
(2)引用模块
require("<模块名>")