Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
1.轻量级: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。
2.可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。
相较于c语言来说在,lua在每行程序末尾不带 “;”
而且不能使用i++ , i--, ++i, --i
单行注释用--
而不是/
多行注释用--[[ ]]--
而不是/... .../
.
用来访问对象,:
用来访问函数
与——and
或——or
非——not
不等于—— ~=
关键词
以下列出了 Lua 的保留关键字。保留关键字不能作为常量或变量或其他用户自定义标示符:
and break do else
elseif end false for
function if in local
nil not or repeat
return then true until
while
全局变量
默认情况下,定义的就是全局变量
例:a=1
局部变量
在变量前加 local
例:local a=1
数据类型
nil(空)——这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean(布尔)——包含两个值:false和true。
number(数字)——表示双精度类型的实浮点数
string(字符串)——字符串由一对双引号或单引号来表示
function(函数)——由 C 或 Lua 编写的函数
userdata(自定义类型)——表示任意存储在变量中的C数据结构
thread(线程)——表示执行的独立线路,用于执行协同程序
table(数组)——Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
if语句
if (布尔表达式) then
--执行语句
end
示例:
a=7
if a<8 then
print("a小于8")
end
输出结果:a小于8
if…else…语句
if (布尔表达式) then
--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end
示例:
a = 100 --定义变量
if( a < 20 ) then
--[ if 条件为 true 时执行该语句块 --]
print("a 小于 20" )
else
--[ if 条件为 false 时执行该语句块 --]
print("a 大于 20" )
end
print("a 的值为 :", a)
输出结果:a大于20
a的值为: 100
if嵌套
if( 布尔表达式 1) then
--[ 布尔表达式 1 为 true 时执行该语句块 --]
elseif(布尔表达式 2) then
--[ 布尔表达式 2 为 true 时执行该语句块 --]
end
end
示例:
a = 100
b = 200
if( a == 100 ) then
elseif( b == 200 ) then
print("a 的值为 100 b 的值为 200" )
end
end
print("a 的值为 :", a )
print("b 的值为 :", b )
输出结果:
a的值为100b的值为200
a的值为:100
b的值为:200
while循环
while(条件判断) do
循环体语句
end
条件判断结果为布尔表达式。即 fasle 或 true
示例:
a=10
while( a < 20 )
do
print("a 的值为:", a)
a = a+1
end
输出结果:
a 的值为: 10
a 的值为: 11
a 的值为: 12
a 的值为: 13
a 的值为: 14
a 的值为: 15
a 的值为: 16
a 的值为: 17
a 的值为: 18
a 的值为: 19
for循环
for var=exp1,exp2,exp3 do
--执行语句
end
---exp1为初始值;exp2为终值;exp3为递增值,省略则默认为1
示例
for i=1,5,1 do
print("a的值为",i)
end
输出结果:
a的值为:1
a的值为:2
a的值为:3
a的值为:4
a的值为:5
函数function
function 函数名(参数1,参数2,参数3)
--执行语句
return 返回值1,返回值2,返回值3
end
示例
function max(a,b)
if(a>b) then
result = a
else
result = b
end
return result
end
print("最大值为",max(5,8))
输出结果:
最大值为:8
数组定义
array1={} --定义一个空数组
array2={1,2,3,4,5,6} --定义一个带值的数组
--数组的使用
--一维数组
a={1,2,3,4,5,6}
print(a[3])
输出结果:3
--多维数组
array={}
for i=1,2 then
for j=1,2 then
array[i][j]=i*j
end
end
print(array[1][2])
输出结果:2
备注:上面得到的是一个二维数组array[2][2]={1,2;2,4}
错误处理
错误分为语法错误
和运行错误
语法错误
比运行错误
更好查找
--语法错误示例
a == 2
执行结果:
lua: test.lua:2: syntax error near '=='
运行错误
是程序可以正常执行,但是会输出报错信息。如下实例由于参数输入错误,程序执行时报错:
function add(a,b)
return a+b
end
add(10)
当我们编译运行以下代码时,编译是可以成功的,但在运行的时候会产生如下错误:
lua: test2.lua:2: attempt to perform arithmetic on local 'b' (a nil value)
stack traceback:
test2.lua:2: in function 'add'
test2.lua:5: in main chunk
[C]: ?
以下报错信息是由于程序缺少 b 参数引起的。
错误查找
pcall(function,x1,x2,x3)
第一个参数为一个函数的名字,注意没有(),后面的参数为需要给函数传递的参数;
函数的第一个返回值表示是否执行成功,成功为ture,不成功为false,
若所传递的函数也有返回值,则在pcall返回的第二个值之后接收。
字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。
Lua 语言中字符串可以使用以下三种方式来表示:
单引号间的一串字符。
双引号间的一串字符。
[[和]]间的一串字符。
以上三种方式的字符串实例如下:
string1 = "Lua"
print("\"字符串 1 是\"",string1)
string2 = 'LUa'
print("字符串 2 是",string2)
string3 = [["LUA 教程"]]
print("字符串 3 是",string3)
以上代码执行输出结果为:
"字符串 1 是" Lua
字符串 2 是 LUa
字符串 3 是 "LUA 教程"
操作字符串
string.upper(字符串)
——字符串全部转为大写字母
string.lower(字符串)
——字符串全部转为小写字母
示例:
s="qaZWSxedc"
t1=string.upper(s)
t2=string.lower(s)
print(t1)
print(t2)
输出结果:
QAZWSXEDC
qazwsxedc
string.gsub(要替换的字符串,被替换的字符,要替换的字符,替换次数)
——在字符串中替换
示例:
string.gsub("aaaa","a","z",3);
zzza 3
string.find (字符串, 查找的字符, [init, [end]])
——在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。
示例1:
string.find("Hello Lua user", "Lua", 1)
7 9
示例2:
s1="asdfg"
i,j=string.find(s1,'df')
print("i="..i)
print("j="..j)
输出结果:
i=3
j=4
string.reverse(arg)
——字符串反转
示例:
string.reverse("Lua")
auL
string.char(arg)
和 string.byte(arg[,int])
——char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。
示例:
string.char(97,98,99,100)
abcd
string.byte("ABCD",4)
68
string.byte("ABCD")
65
string.len(arg)
——计算字符串长度
示例:
string.len("abc")
3
..
——链接两个字符串
示例:
print("abc".."def")
abcdef
string.sub(str,i,j)
——提取字符串,提取str
中的第i
到第j
个字符
示例:
s1="abcdefghijk"
t=string.sub(s1,3,7)
print(“提取的字符为:”..t)
输出结果:
提取的字符为:cdefg