Lua初学习 9-12 基础
1:string 轉(zhuǎn) number :tonumber(string)
2: number 轉(zhuǎn) string :tostring(number)
3:string API:
? ? ? ?Lua中的字符串是不可變值,a = "cocotang" ?string.gsub(a,"c","z") ?print(a) ----> cocotang
? ? ? ? 1獲得字符串長(zhǎng)度:string.len(string) ?或者 #string
? ? ? ? 2拼接2個(gè)字符串: string..string ? ? && ? ?如果是2個(gè)number number .. number(空格不然誤認(rèn)為小數(shù)點(diǎn))
? ? ? ? 3截取字符串,組成新的字符串:string.gsub(a,"cc","zz",index) a字符串中的 cc 由 zz 代替 直到index位置
? ? ? ? 4查找字符串中的某字符串位置:string.find(a,"coco") 返回2個(gè)值 c 的index 與 o的index
4:io.read() 獲取控制臺(tái)輸入
5: Table創(chuàng)建一個(gè)List(數(shù)組)
? ? ? ? ? ?a={}
? ? ? ? ? ?1:當(dāng)key 賦值1-10時(shí),len = 10
? ? ? ? ? ?2:當(dāng)key 賦值0-10時(shí),len = 10 (同上)
? ? ? ? ? Lua中通常用 1 來(lái)做 Index的初始值 ?(table.maxn(a))--->返回最大正索引 Index
6:取精度?
? ? ?x = 3.123456 print(x-x%0.001) ? ---->3.123
? ? ?x%1 結(jié)果是 x的小數(shù)部分 0.123456
? ? ?x-x%1 結(jié)果是 x的整數(shù)部分 3 ??
? ? ?x-x%0.001 結(jié)果是 x取小數(shù)點(diǎn)后三位
7:運(yùn)算符
? ? ?> < == >= <= 同于C#
? ? ? ~= 不等于(C# !=)
? ? ? Lua中取反 not(空格) ? (C# !)
8:運(yùn)算優(yōu)先級(jí)
? ? ? 基本同于C#,直接用括號(hào)顯示的表現(xiàn)優(yōu)先級(jí) 容易理解
? ? ? -x^2 ?-------> -(x^2)
? ? ? x^y^z --------->x^(y^z)
9:Table構(gòu)造式
? ? ?a = {x = 10 , y = 20} 等價(jià)于a ={["x"]=10 ,["y" =20]} ?等價(jià)于 a = {} a["x"] =10 a["y"] =20 ?等價(jià)于 a = {} a.x= 10 a.y = 20
10:Table里面刪除一個(gè)變量
? ? ? a = {} a.x= 10 ?a.x= nil
11:交換變量(Lua里面有點(diǎn)特別) (多重賦值 調(diào)函數(shù)時(shí)傳入的實(shí)參多余或者少于形參時(shí),與多重賦值非常相似)
? ? ?C#中:int a=1;int b=2; 交換: int c = a; a =b; b=c;
? ? ?Lua中:a = 1 b = 2 ?交換:a,b = b,a
? ? ?a,b = 1,2,3 ---->舍棄3
? ? ?a,b,c = 1,2 ?----->c=nil
12:流程控制
? ? ?1由于Lua不支持Switch語(yǔ)句,所以一連串的if elseif 是很常見的
? ? ?2循環(huán)中用break可以跳出循環(huán)
13:Lua中沒有 ++ --,并且 += ?-=也沒有 ? ?如果遞增1 a=a+1
14:Lua中的Foreach( Generic for)
? ? ? 1遍歷所有k: a = {x=1,y=2,z=3;"one","two","three"}
? ? ? ? for k in pairs(a) do
? ? ? ? print(k) ?------> ?1 2 3 y x z
? ? ? ? end
? ? ? ?2遍歷所有v:
? ? ? ? ?for i , v in pairs(a) do
? ? ? ? ?print(v) ?-------> one two three 2 1 3
? ? ? ? ?end
? ? ? ? 2-2 遍歷所有的v? ? ? ? ?
? ? ? ??for k in pairs(a) do
? ? ? ? print(a[k]) ?------> ?1 2 3 y x z
? ? ? ? end
? ? ? ? 3遍歷數(shù)組a的所有值
? ? ? ? for i , v in ipairs(a) do
? ? ? ? print(v) ?---------> one two three
? ? ? ? end
? ? 值得注意的是:遍歷數(shù)組a中的值,ipairs(a) 輸出的并不是所有的value,以后慢慢了解
15:逆向Table(反轉(zhuǎn)key value)
? ? ? ?a = {x=1, y =2, z =3}
? ? ? ?b = {}
? ? ? ?for k,v in pairs(a) do
? ? ? ?b[v] = k
? ? ? ?end
16:break與return
? ? ? ?break跳出循環(huán),return跳出方法
? ? ? ?注意:但是如果return在if前面 ?報(bào)錯(cuò)
17:方法的調(diào)用
? ? ? ?a = {}
? ? ? ?function a:Test() print("orz") end
? ? ? ?第一種調(diào):a:Test() ? ?第二種調(diào):a.Test() 注意第二種隱式的傳入了a ?--->a.Test(a)
? ? ? ?假如 function有一個(gè)參數(shù),用第二種調(diào) a.Test(n) 報(bào)錯(cuò),應(yīng)該---> a.Test(a,n)
18:方法的返回值
? ? ?function foo1() end 無(wú)返回值
? ? ?function foo2() return 1 end 返回一個(gè)值
? ? ?function foo3() return 1,2 end 返回兩個(gè)值
? ? ?x,y = foo3() ----> x =1, y = 2
? ? ?x = foo3() ?------> x =1 , ?2被丟棄
? ? ?x,y,z = foo3() ----->x=1,y=2,z=nil
? ? ?x,y = foo3(),99 ?----->x = 1,y = 99
? ? ?x,y = foo1(),20,30 ---->x = nil , y =20 ? ?30被丟棄
? ? ?注意:Table 可以接受 函數(shù)返回的所有值,前提是函數(shù)作為table構(gòu)造式中最后一個(gè)參數(shù),如果不是最后一個(gè)參數(shù),那么只會(huì)取第一個(gè)返回值,無(wú)返回值則為nil
? ? ?如果強(qiáng)行讓函數(shù)返回第一個(gè)值,可以用一對(duì)小括號(hào) 括起來(lái)函數(shù) ---> (foo()) 不管foo有幾個(gè)返回值,都只返回第一個(gè),沒有返回nil
? ? ? 特殊內(nèi)置函數(shù) unpack:它接受一個(gè)數(shù)組作為參數(shù),并從下標(biāo)1開始返回該數(shù)組的所有元素
? ? ? ?例如:print(unpack({1,2,3,4,5,66})) ? ----> 1,2,3,4,5,66
19:?算術(shù)類元方法
__add()?? + 運(yùn)算對(duì)應(yīng)的元方法
__sub()? ?
__mul
__div
__mod
__pow
__unm???? 相反數(shù)
__concat? .. 運(yùn)算對(duì)應(yīng)的元方法
?
? ? ??
? ? ? ? ??
? ? ? ? ?
轉(zhuǎn)載于:https://www.cnblogs.com/cocotang/p/5864861.html
總結(jié)
以上是生活随笔為你收集整理的Lua初学习 9-12 基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django之model补充:一对多、跨
- 下一篇: windows 2008 r2 系统默认