Lua是一个小巧的脚本语言。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。[2] Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。[2] 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
– print(“Hello,Lua”) --Hello,Lua
– print(“hangsfsfdg”) --hangsfsfdg
– print(“idsf”);print(“sfsfdfg”) --idsf --sfsfdfg
-------------------变量------------------
–Lua中变量无需指定数据类型,根据赋值号右侧数据内容的类型
–类别会自动识别
– name = 100
–如果值字符串类型可以使用“”,也可以使用‘’
–lua语言中变量可以直接引用
– print(name) --100
– print(type(name))–nuamber
–可以这样赋值,定义两个变量可以只赋一个值
– sex,age = ‘男’,18
– sex,age = ‘男’
–gender = ‘man’,18
– print(sex,age)
---------------逻辑运算符----------------------------
–lua中逻辑运算符:and or not
–nil为false,其他任何值(包括0)都为真
–当and时,两个值都为真时取后一个值
–当or时,两个值都为真时取第一个值
– isOk = true
– print(not isOk or 1)–1
– print(isOk and msg)–nil
– print(nil and 3)–nil
– print(4 or 5)–4
– print(4 and 5)–5
– print(false or 5)–5
– print(not 4)–false
------------------三目运算符-------------------
– a=4
– b= 5
– print(a or b) – 4
– print(a and b) – 5
– isOk?4:5
– isOk = false
– print((isOk and a) or b)
-----------------连接运算符-------------------------------
– print(“wangxing”…“真的好丑”)
-------------------数组------------------数组是一个table类型的
– table_age = {} --可以这样定义
– table_age = {“hello”,1,2,3,4,5}–可以存储不同的类型的元素
–数组的长度不用固定
– print(type(table_age))
–访问数组元素.默认数组的下标是从1开始的,数组越界不会崩溃,会直接打印nil(它也是一种数据类型)
–如果想要下标从0开始----------------给他制定一个值
– print(table_age[1]) – hello
– table_num={1,3,5,7}
– table_num[0] = 9
– table_num[“aa”] = 8
– print(table_num[0]) --nil
– print(table_num[“aa”]) --nil
– print(table_num[1]) --1
–任意类型都可以存储,包括函数
–如果表里面的数据包括普通的数值,又有键值对,使用表名【下标】取得值是表里面的普通数值,会把键值对跳过去,表明[下标]只会读取普通数值
–如果想取键值对,则表名[‘键的名字’]或表名.键名
– score = {
– [0] = 34,
– o = 35,
– name = “lanou”,
– 69,
– age = 20,
– 89,
– nil
– }
– print(score.name) --lanou
– print(score[‘name’]) --lanou
– print(type(score)) --table
– print(score[0])–34
– print(score[‘o’])
– print(score[1])–69
– print(score.name)
– name = 9
– tab = {“Lanou”,age = 20,60,name}
– print(tab[0]) --nil
– print(tab[1]) --lanou
– print(tab.age) – 20
– print(tab[3]) – 9
– table相当于数组
– score = {89,90,78,60}
–table相当于一个字典
– tab = {name = “LO”,age = 20,[“mmm”]=‘jjj’,[111]=555}
–表里面的注意事项
–[[
1.所有元素以逗号分开
2.所有索引值都需要用[]扩起来,但是如果是字符串,就可以去掉引号和中括号,如果没有[]括起来,则认为是字符串索引
3.如果不写索引,则索引就会被认为默认为数字索引,并按顺序自动从1开始往后编
4.如果字符串当索引的话,不能直接使用引号,,可以直接使用在[]中添加引号形式
]]
– print(tab[‘mmm’]) --jjj
– print(tab[111])–555
– stuent ={[“name”] = “wangxing”,30,28,30}
– tab1 = {[tab]= “table”}
– print(tab1[tab])
–look = {[temp]= 1,11} --这种情况下会报错table index is nil
– temp = 2
– temp1= 2
– tab = {[temp] = 1,11}
– temp = 1
– print(tab[temp])–11
– print(tab[temp1])
–虽然定义了temp = 2,但是后来改变了temp = 1,所以指向的另外的key
–由上综述
–1.对于字符串,在{}定义时,可以Key = value,也可以[“flag”]= nil,索引都是string类型,对于非nil类型变量(包括字符串),都可以使用[var]= value的方式
–2.使用table时,对于字符串,可以通过.的方式进行访问,也可以通过[]方式访问,对于tab[a]和tab[b],如果a=b,tab[a]访问到tab[b]的内容
– -------------------------循环-------------------------------
–循环语句1
–[[
for i=起始值,终止值,增量(可忽略) do
循环体
end
]]
–输出2-10之间的所有偶数
– for i=2,10,2 do
– print(i)
– end
–循环语句2
–while循环体内可以更改循环条件,而for循环不可以
–[[
whie 条件表达式 do
循环语句
end
]]
–输出2-10之间的所有偶数
– i = 2
– while i<=10 do
– print(i)
– i=i+2
– end
–循环语句3
–[[
repeat
循环语句
until 条件表达式
]]
–输出1-100之间的所有数的和
– i= 1
– sum = 0
– repeat
– sum = sum+i
– i=i+1
– until i>100
– print(sum)
–如果老王有10000元,每天花一半,多少天可以花完如果剩余数量小于0.01,算花完
–方法1
– b = 10000
– c = 0
– d = 0
– repeat
– c = b/2
– b= b-c
– d = d+1
– until b<0.01
– print(d)
–方法2
– money = 10000
– day = 0
– while money>=0.01 do
– money = money/2
– day= day+1
– print(money)
– end
– print(day)
–sum = 1+2+3+…+N,求sum不超过10000的最大整数值和项值
n=0
N=0
repeat
n=n+1
N=N+n
until N>10000
print(N-n)
print(n-1)
–求1-100内质数的和
– sum = 0
– for i=2,100 do
– t = 0
– for j=i,2,-1 do
– if i%j == 0 then
– t = t+1
– end
– end
– if t==1 then
– sum = sum+i
– end
– end
– print(sum)
----------遍历数组-----------------
– arrAges = {1,2,3,4,5}
–表中插入一个元素
– table.insert(arrAges,2,“nihao”)
–表中移除一个元素
– table.remove(arrAges,4)
– for i=1,#arrAges do
– print(arrAges[i])
– end
------------通过#表名,可以获取table或者字符串的长度
–获取表名的长度#name或这字符串的长度
– name = “lanoukeji”
– print(#name)
–列出参数中指定table的数组部分从Start位置到end位置的所有元素
–这些元素之间以指定的分隔符隔开
– print(table.concat(arrAges,"*",1,3))
–使用Table来实现冒泡排序
– SortArr = {20,19,56,9,67}
– for i=1,#SortArr do
– for j=1,#SortArr-i do
– if SortArr[j]>SortArr[j+1] then
– tem = 0;
– tem = SortArr[j]
– SortArr[j] = SortArr[j+1]
– SortArr[j+1] = tem
– end
– end
– end
– for i=1,#SortArr do
– print(SortArr[i])
– end
–if语法的三种格式
–1.
– if true then
– print(“苹果”)
– end
–2.
– if true then
– print(“苹果”)
– else
– print(“香蕉”)
– end
–3.
– if true then
– print(“苹果”)
– elseif(a==3) then
– print(“香蕉”)
– else
– print(“梨”)
– end
–for i = 1, 10,2 do
– i = i + 100
– print(i)
– end
—101 ,103, 105,107,109
–在lua中一旦循环条件设定,下面对循环变量的更改,不会对结果造成影响(避免这种情况的出现)
–print(#dic)
– for i,v in pairs(dic) do
– print(v)
– end
–练习,求出集合中出现频率最高的元素,并输出
arr = {4,“blue”, “blue”, “red”,“blue”}
– //dic存储数组中出现的元素 = 次数
– dic = {}
– for i = 1,#arr do
s = arr[i]
print(s)
– if dic[s] then
– dic[s] = dic[s] + 1
– else
– dic[s] = 1
– end
– end
– for i,v in ipairs(dic) do
– print(k,v)
– end
-----------------------------------方法-----------------------------------
–方法可以使用一个变量来接收,这个变量就是方法的名字
– func = function ()
– print(“This is a funcion”)
– end
– print(func)
– func()
– sum(4,5)
– hero = {name = “Dema”, hp = 1000}
– hero.attack = function()
– print(“attack”)
– end
– hero.attack()
– hero = {name = ‘hero’,hp = 1000,attack = function()
– print(“attack”)
– end}
–函数的多重返回值,只需要在return关键字后面
–列出返回值,用逗号隔开,多重返回值需要使用多个
–变量接收
– function Cal(a,b)
– return a + b,a - b, a * b, a / b;
– end
– w, x,r,t = Cal(2,4);
– print(w,x,r,t)
– function func()
– end
– function func()–无返回值
– end
– function func1( )–有一个返回值
– return “a”
– end
– function func2()–有两个返回值
– return “a” ,“b”
– end
– x,y = func2() --x = “a” y = “b”
– x = func2() --x = “a”, b会被丢失掉
– x,y,z =10,func2() – x = 10, y = “a” , z = “b”
– x, y =func() – x= nil y = nil
– x,y = func1() – x = “a”, y = nil
– local t = {func()} – t表示一个空的table
– local t ={func1()} – t = {“a”}
– local t = {func2()} – t = {“a”, “b”}
– --当多重返回值的函数调用出现在table表中时,在
– --访问表中元素是只会返回当前函数的第一个返回值
– local t = {func(), func2,4} –
– print(t[1])
– print(t[2])
– print(t[3])
– --可以在一个函数中返回另一个函数的返回值
– function MyFunc( )
– --注意:这里如果是返回func2(),表示会返回
– --func2中所有返回值,如果是(func2()),只会返回一个返回值
– return func2()
– end
– print(MyFunc())
–可变参数类型的函数
– function ArguementFun(…)
– for i,v in ipairs{…} do
– print(v)
– end
– end
– ArguementFun(456,223,334,“aaa”)