1:string 轉 number :tonumber(string)
2: number 轉 string :tostring(number)
3:string API:
? ? ? ?Lua中的字符串是不可變值,a = "cocotang" ?string.gsub(a,"c","z") ?print(a) ----> cocotang
? ? ? ? 1獲得字符串長度:string.len(string) ?或者 #string
? ? ? ? 2拼接2個字符串: string..string ? ? && ? ?如果是2個number number .. number(空格不然誤認為小數點)
? ? ? ? 3截取字符串,組成新的字符串:string.gsub(a,"cc","zz",index) a字符串中的 cc 由 zz 代替 直到index位置
? ? ? ? 4查找字符串中的某字符串位置:string.find(a,"coco") 返回2個值 c 的index 與 o的index
4:io.read() 獲取控制臺輸入
5: Table創建一個List(數組)
? ? ? ? ? ?a={}
? ? ? ? ? ?1:當key 賦值1-10時,len = 10
? ? ? ? ? ?2:當key 賦值0-10時,len = 10 (同上)
? ? ? ? ? Lua中通常用 1 來做 Index的初始值 ?(table.maxn(a))--->返回最大正索引 Index
6:取精度?
? ? ?x = 3.123456 print(x-x%0.001) ? ---->3.123
? ? ?x%1 結果是 x的小數部分 0.123456
? ? ?x-x%1 結果是 x的整數部分 3 ??
? ? ?x-x%0.001 結果是 x取小數點后三位
7:運算符
? ? ?> < == >= <= 同于C#
? ? ? ~= 不等于(C# !=)
? ? ? Lua中取反 not(空格) ? (C# !)
8:運算優先級
? ? ? 基本同于C#,直接用括號顯示的表現優先級 容易理解
? ? ? -x^2 ?-------> -(x^2)
? ? ? x^y^z --------->x^(y^z)
9:Table構造式
? ? ?a = {x = 10 , y = 20} 等價于a ={["x"]=10 ,["y" =20]} ?等價于 a = {} a["x"] =10 a["y"] =20 ?等價于 a = {} a.x= 10 a.y = 20
10:Table里面刪除一個變量
? ? ? a = {} a.x= 10 ?a.x= nil
11:交換變量(Lua里面有點特別) (多重賦值 調函數時傳入的實參多余或者少于形參時,與多重賦值非常相似)
? ? ?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語句,所以一連串的if elseif 是很常見的
? ? ?2循環中用break可以跳出循環
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遍歷數組a的所有值
? ? ? ? for i , v in ipairs(a) do
? ? ? ? print(v) ?---------> one two three
? ? ? ? end
? ? 值得注意的是:遍歷數組a中的值,ipairs(a) 輸出的并不是所有的value,以后慢慢了解
15:逆向Table(反轉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跳出循環,return跳出方法
? ? ? ?注意:但是如果return在if前面 ?報錯
17:方法的調用
? ? ? ?a = {}
? ? ? ?function a:Test() print("orz") end
? ? ? ?第一種調:a:Test() ? ?第二種調:a.Test() 注意第二種隱式的傳入了a ?--->a.Test(a)
? ? ? ?假如 function有一個參數,用第二種調 a.Test(n) 報錯,應該---> a.Test(a,n)
18:方法的返回值
? ? ?function foo1() end 無返回值
? ? ?function foo2() return 1 end 返回一個值
? ? ?function foo3() return 1,2 end 返回兩個值
? ? ?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 可以接受 函數返回的所有值,前提是函數作為table構造式中最后一個參數,如果不是最后一個參數,那么只會取第一個返回值,無返回值則為nil
? ? ?如果強行讓函數返回第一個值,可以用一對小括號 括起來函數 ---> (foo()) 不管foo有幾個返回值,都只返回第一個,沒有返回nil
? ? ? 特殊內置函數 unpack:它接受一個數組作為參數,并從下標1開始返回該數組的所有元素
? ? ? ?例如:print(unpack({1,2,3,4,5,66})) ? ----> 1,2,3,4,5,66
19:?算術類元方法
__add()?? + 運算對應的元方法
__sub()? ?
__mul
__div
__mod
__pow
__unm???? 相反數
__concat? .. 運算對應的元方法
?
? ? ??
? ? ? ? ??
? ? ? ? ?