Lua 是一種輕量小巧的腳本語言,用標(biāo)準(zhǔn)C語言編寫并以源代碼形式開放,
其設(shè)計目的是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能。
Lua特性說明
1.采用標(biāo)準(zhǔn)c語言編寫,編譯后源碼僅100多k
2.豐富的擴(kuò)展接口和機(jī)制,自動內(nèi)存管理
3.支持面向過程和函數(shù)式編程
應(yīng)用場景
1.獨(dú)立應(yīng)用腳本
2.游戲開發(fā)
3.web應(yīng)用腳本
.....
熱更新
熱更新技術(shù)就是可以在不重新下載客戶端的情況下,實(shí)現(xiàn)更新游戲內(nèi)容常見于移動端。
c#代碼必須經(jīng)過編譯,編譯過程無法在移動平臺完成,所以當(dāng)游戲邏輯變更的時候,必須要在開發(fā)環(huán)境下對源文件重新編譯,上傳用戶體驗(yàn)差,浪費(fèi)時間
Lua基本語法
print()是Lua中內(nèi)置的輸出語句
Lua中的字符串用””或者’’都可以
?Lua中每一條語句都不需要分號(;)結(jié)束
--> 變量
print(var)
gVar = 0 -- 全局變量
--lua中是沒有數(shù)據(jù)類型的
var = 0
print(type(var)) ?-- number
var1 = 0.2
print(type(var1))? -- number
在lua中number相當(dāng)于C#中的值類型(int float double)
默認(rèn)number 就是 double
var5 = function ()
print("lua")
end
print(type(var5)) ?-- function類型
var6 = {}
print(type(var6)) ?-- table類型
演示局部變量和全局變量,這里的do和end 與C#中的{}差不多
do
c = 5 -- 默認(rèn)是全局變量
local c2 = 1 -- 局部變量
end
print(c,c2) -- 打印出來的就是 5 nil ?
lua可以對多個變量同時賦值,變量列表和值列表 各個元素之間用,隔開,賦值語句右邊會依次賦值給左邊
x,y,z = 1,2,3 ?--如果左邊只有x,y 那x = 1 y = 2 ?,3不管 如果右邊只有1,2那z = nil
運(yùn)算符 ? + - * / %(取余) ^(次方) -(負(fù))
關(guān)系運(yùn)算符 ?> ?>= ?< ?<= ?== ?~=(不等于)
邏輯運(yùn)算符 ?and(&&) or(|) not(!)
連接運(yùn)算符 ..(相當(dāng)于C#中的 + )
長度運(yùn)算符 # ? 能夠得到字符串,表..的長度
運(yùn)算符優(yōu)先級,由高到低
^
not -
* /
+ -
..
> >= < <= == ~=
and
or
Lua分支結(jié)構(gòu)
if雙分支結(jié)構(gòu)
?a = 50
if (a < 0) then
print("a的值小于0")
else
print("a的值大于等于0")
end
if-elseif-else結(jié)構(gòu)
a = -1
if(a>0)then
elseif(a < 0)then
print("a的值小于0")
elseif(a == 0)then
else
end
Lua循環(huán)之 while循環(huán)
輸出1-100的和
sum = 0
a = 0
while(a <= 100)
do
a = a + 1
sum = a + sum
if(a == 100)then
print(sum)
break
end
end
Lua循環(huán)之 repeat..until
輸出15句hello world
a = 10
repeat
print("hello world")
a = a + 1
until a > 15
Lua循環(huán)之for循環(huán)
輸出100以內(nèi)的奇數(shù)
for i=1,100 do
if(i % 2 == 1)
then
print(i)
end
end
Lua的函數(shù)
1.無參無返回值
function Say()
print("LUA")
end
-->函數(shù)的調(diào)用
Say()
無參有返
-- var = function()
-- return "lua"
-- end
-- print(var())
有參無返
var = function (arg)
print("hello"..arg)
end
var(" lua")
有參有返
var = function (a,b)
return a+b
end
print(var(2,1))
演示函數(shù)作為參數(shù)傳遞給函數(shù)
function MyFunc(para)
para()
end
function Say()
print("hello")
end
MyFunc(Say)
演示2
function MyPrint(param)
print("兩個數(shù)的和為",param)
end
function Add(num1,num2,funcParam)
result = num1 + num2
funcParam(result)
--return result
end
Add(10,2,MyPrint)
在lua中函數(shù)可以有多個返回值
function F(a,b)
return a+b,a-b,a*b,a/b
end
var,var1,var2,var3 = F(10,10)
print(var,var1,var2,var3)
lua中函數(shù)的可變的參數(shù)列表
function Sum( ... )
print("求和函數(shù)")
local args = {...}
print("總共傳入"..#args.."個參數(shù)")
sum = args[1] + args[2]
print(sum)
end
Sum(1,5)
數(shù)組
array = {"c#","unity","lua"}
for i=1,3 do
print(array[i])
end
這里需要注意lua中的數(shù)組是從1開始的,當(dāng)然你也可以自定義下標(biāo)
二維數(shù)組
array = {}
for i=1,3 do
array[i] = {}
for j=1,3 do
array[i][j] = i * j
end
end
for i=1,3 do
for j=1,3 do
print(array[i][j])
end
end
演示泛型迭代器
days = {"星期一","星期二","星期三","星期四","星期五",
"星期六","星期七"}
for index,value in pairs(days) do
?print(index,value)
?end
這里的index和value可以改名字但是不能賦值
Lua 表
gMyTable = {
["name"] = "lucy",
["age"] = 18,
["sex"] = "woman",
["name"] = "lily",
"測試",
"測試1"
}
表中的數(shù)據(jù)的存儲都是放在棧中,可以存放數(shù)組,可以存放字典,也可以全放在一個表中
for k,v in pairs(gMyTable) do
print(k,v)
end
這樣讀取表中數(shù)據(jù)可以全部讀取
for i,v in ipairs(gMyTable) do
print(i,v)
end
這樣讀取就只能讀取數(shù)組,并且是從1開始連續(xù)的數(shù)組
當(dāng)表中有兩個一樣的Key值時 根據(jù)Key值取的value值一定是后面進(jìn)棧的元素而不是先進(jìn)棧的那個元素
t1 = {}
t1["key"] = "修改前"
t2 = t1
t2["key"] = "修改后"
print(t2.key)? --- 修改后?
print(t1.key)? --- 修改后
t2 = nil
print(t1.key)? --- 修改后 ?
首先t1和t2都只是引用變量 都指向了同一個地方,當(dāng)t2改變了表中的數(shù)據(jù)后,在用t1得到的值一定是修改后的值,
而 t2 = nil 后只是將t2指向內(nèi)存的地址給消除了,內(nèi)存里的東西還在,沒有改變。