Lua是一个由标准C语言开发的、开源的、可扩展的、轻量级的、弱类型的、解释型脚本语言。
Linux系统的Lua
下载并安装
- 从官网下载,并上传到Linux,下载地址:Lua: download area
- 解压
tar -zxvf lua-5.5.0.tar.gz -C /opt/Lua - 安装gcc,如果有可以跳过
- 执行编译命令make linux test
- 执行安装命令 make install
- 验证是否安装成功 lua -v 查看版本号
两种交互模式
Lua提供了两种交互模式:命令模式和脚本文件模式。
命令行模式
直接再命令行中输入语句,回车就可看到运行结果。
先使用lua命令进入lua命令行模式,然后输入语句后回车开始运行。
lua语句后的分号不强制要求,有没有都行。
脚本文件模式
- 先创建一个脚本文件hello.lua,编辑内容,
- 然后执行lua hello.lua 命令运行脚本
两种脚本运行模式
脚本文件的运行方式有两种:lua命令方式和可执行文件方式。
可执行文件方式就是将lua脚本文件修改为可执行文件运行。
-
修改脚本文件内容
在脚本文件第一行增加#!/usr/bin/lua,表示当前文件使用/usr/bin/lua 命令来运行。
-
修改脚本文件权限
为脚本文件赋予可执行权限
chmod 755 hello.lua -
运行
./hello.lua
windows系统的Lua
Windows系统的Lua运行环境,最常用的是SciTE。
SciTE是一款Lua脚本测试编辑器,提供Lua编辑运行环境。除了SciTE还有LuaDist、LuaRocks等。
下载地址是:Releases · rjpcomputing/luaforwindows
SciTE有两种运行方式:命令行反射光hi和Lua脚本的编辑运行环境。
Lua语法
注释
Lua的行注释为两个连续的减号。
段注释以--[[开头,以--]]结尾。
数据类型
Lua有以下8种数据类型。通过type()可以查看一个数据的类型,比如type(nil) 的结果为nil
标识符
Lua的标识符由字母、数字、下划线组成,不能以数字开头。Lua大小写敏感。
变量
Lua是弱类型语言,变量无需声明即可使用。
变量分为全局变量和局部变量。Lua中的变量默认都是全局变量,即使声明在语句块或函数里。
局部变量local相当于Java中的private,只能在声明的语句块中使用。
变量的类型可以随时改变,无需声明。
运算符
算术运算符
假设A=10 ,B=20,其各种运算符的结果如下:
注意:
- SciTE 仅支持Lua到5.1版本,而整除运算符// 需要5.3 版本以上,所有当前SciTE 看不到效果
- 在命令行模式中,直接输入变量名回车,相当于print()函数输出该变量。
关系运算符
逻辑运算符
假如A=true,B=false
其他运算符
函数
Lua中函数以function开头,后跟函数名和参数列表,以end结尾。
可以没有返回值,也可以一次返回多个值。
lua
function f(a,b)
print (a,b)
end
固定参函数
Lua中的函数不要求实参的个数必须与形参的个数相同。
如果实参个数小于形参个数,剩余的用nil填充。
如果实参个数大于形参个数,多余的会被系统忽略。
可变参函数
函数定义时不给出具体形参的个数,而是使用三个连续的点号。
函数调用时可以传递任意个数的参数,函数会全部接收。
lua
function f(...)
local a,b,c,d=...
print(a,b,c,d) -- 输出前4个参数
print(...) -- 输出所有参数
end
返回多个值
当函数返回多个值,需要有多个变量来同时接收。
lua
function f(a,b)
local sum=a+b
local mul=a*b
return sum,mul
end
m,n=f(3,5)
print (m,n) -- 结果为8,15
函数作为参数
函数作为参数时,可以是已经定义好的普通函数,也可以是匿名函数。
流程控制语句
if语句
Lua提供if...then 用于表示条件判断,if的判断条件可以是任意表达式。
false与nil为假,true与非nil作为真,即使是0也是真。
if的判断条件可以使用小括号,也可以不使用。
lua
if a>0 then
print("num > 0")
else
print("num <= 0")
end
if嵌套语句
if...then...elseif...then...else...end
这里的elseif 中间没有空格。
lua
if a>0 then
print("num > 0")
elseif a==0 then
print("num = 0")
else
print("num < 0")
end
循环控制语句
-
while...do :while中的条件成立就一致循环。
-
repeat...until :until中的条件成立,就停止循环。
luarepeat print(a) a=a-1 until a<0 -
数值for:这种for循环只用于循环变量为数值型的情况,语法格式为:
lua
for var=exp1,exp2,exp3 do
循环体
end
var为循环遍历,exp1为循环初始值,exp2为循环结束值,exp3为循环步长。
步长不写时,默认为1。
-
泛型for:用于遍历table中的值,要与Lua的迭代器联合使用。
-
break:提前终止循环。
-
goto:跳转到指定标记语句处开始执行。语句标记使用双冒号括起来,置于语句前面。
goto语句可以用在循环之外。
注意:Lua5.1 不支持双冒号的语句标记。
luafunction f(a) ::flag:: print(a) if a>1 then print("hello") a=a-1 goto flag end end