Lua
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
如果出现错误需要安装lua相关依赖库的支持
yum install libtermcap-devel ncurses-deve1 libevent-deve1 readline-deve1
测试lua是否安装成功
lua
入门程序
创建一个hello.lua文件
vi hello.lua
执行lua程序
lua hello.lua
还可以进入Lua控制台去执行
lua 或 lua -i 都是可以的
编程模式
lua有交互式编程和脚本式编程。
交互式编程就是直接输入语法,就能执行。
脚本式编程需要编写脚本,然后再执行命令 执行脚本才可以。
一般采用脚本式编程。(例如:编写一个hello.lua的文件,输入文件内容,并执行lua hell.lua即可)
1、交互式编程
Lua 提供了交互式编程模式。我们可以在命令行中输入程序并立即查看效果。
Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用:
lua -i
如下图:
2、脚本式编程
我们可以将 Lua 程序代码保持到一个以 lua 结尾的文件,并执行,该模式称为脚本式编程,例如上面入门程序中将lua语法写到hello.lua文件中。
lua的基本语法
注解
一行注释:两个减号是单行注释:
--
多行注释
--[[
多行注释
多行注释
--]]
定义变量
默认是全局变量
-- 全局变量赋值
a=1
-- 局部变量赋值
local b=2
如果变量没有初始化:则它的值为nil这个和java中的null不一样
Lua中的数据类型
Lua是动态类型语言,变量不用类型定义,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。
Lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table
数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false) |
boolean | 包含两个值:false和true |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示。 |
userdata | 表示任意存储在变量中的C数据结构 |
function | 由 C 或 Lua 编写的函数 |
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
type:函数,输出对象的类型
流程控制
(1)if语句
Lua if 语句由一个布尔表达式作为条件判断,其后紧跟其他语句组成。
语法:
if(布尔表达式)
then
--[[ 在布尔表达式为 true 时执行的语句 --]]
end
实例:
(2)if…else语句
Lua if 语句可以与 else 语句搭配使用,在if条件表达式为 false 时执行 else 语句代码块
语法:
if(布尔表达式)
then
--[[ 布尔表达为 true 时执行该语句块 --]]
else
--[[ 布尔表达为 true 时执行该语句块 --]]
end
实例:
循环
(1)while循环[满足条件就循环]
Lua 编程语言中 while 循环语句在判断条件为 true 时会重复执行循环体语句。
语法:
while(codition)
do
statements
end
实例:
a=10
while(a<20)
do
print("a 的值为:",a)
a = a+1
end
(2)for循环
Lua 编程语言中 for 循环语句可以重复执行指定语句,重复次数可在for语句中控制。
语法:1->10 1:exp1,10:exp2 ,2:exp3:递增的数量
for var=exp1,exp2,exp3
do
<执行体>
end
实例:
for i=1,10,2
do
print(i)
end
(3)repeat…until语句[满足条件结束]
Lua 编程语言中 repeat…until 循环语句不同于 for 和 while 循环,for 和 while 循环的条件语句在当前循环执行开始时判断,而 repeat…until 循环的条件语句是在当前循环结束后判断
语法:
repeat
statements
until(condition)
实例:
函数
Lua 中也可以定义函数,类似于java中的方法。例如:
--[[ 函数返回两个值的最大值 --]]
function max(num1,num2)
if(num1>num2)
then
result=num1
else
result=num2
end
return result
end
-- 调用函数
print(max(11,19))
… :表示拼接
表
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。
实例:
-- 初始化表
mytable = {}
-- 指定值
mytable[1] = "Lua"
-- 移除引用
mytable = nil
模块
(1)模块定义
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。
创建一个文件叫module.lua,在module.lua中创建一个独立的模块,代码如下:
-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
-- 定义一个常量
module.constant = "这是一个常量"
-- 定义一个函数
function module.func1()
print("这是一个公有函数")
end
local function func2()
print("这是一个私有函数!")
end
function module.func3()
func2()
end
return module
由以上可知,模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。
上面的 func2 声明为程序块的局部变量,即表示一个私有函数,因此是不能从外部访问模块里的这个私有函数,必须通过模块里的公有函数来调用.
定义一个module.lua
(2)require 函数
require 用于 引入其他的模块,类似于java中的类要引用别的类的效果。
用法:
require("<模块名>")
require "<模块名>"
使用上面这两种都可以
我们可以将上面定义的module模块引入使用,创建一个test_module.lua文件,代码如下:
定义一个text_module.lua去调用module.lua
-- test_module.lua 文件
-- module 模块为上文提到 module.lua
require("module")
print(module.constant)
module.func1()
module.func3()
输出结果