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 .. 运算对应的元方法