Window環境下安裝Lua
我是用集成好的 Lua for Window 集成包安裝
也可以通過通過下載官方源碼,編譯出庫、編譯器、解釋器
在window下可以使用一個叫”SciTE”的IDE環境來執行Lua程序
Lua for Window下載地址:http://luaforge.net/frs/download.php/4535/LuaForWindows_v5.1.4-35.exe
官方下載地址:http://www.lua.org/download.html
Lua基本語法
Lua提供交互式編程,可以在命令行中輸入程序並且立即查看結果
同時也有腳本編程
將Lua程序代碼保存到一個以.lua的後綴文件中執行
註釋
在Lua中單行註釋爲兩個減號
--註釋
多行註釋
--[[
zzzzzzz
zzzzzzz
zzzzzzz
]]
Lua數據類型
Lua的數據類型只有八種,分別是 nil, boolean, number, string, function, userdata, thread, table
nil————空值,在條件判斷中爲false
boolean—-兩個值,false和true
number—–雙精度類型的實浮點數
string——-字符串類型,有一對雙引號或單引號來表示
function—-方法,函數
userdata—任意存儲在變量中的c數據結構
thread——執行的獨立線路,用於協同程序
table——–在Lua中table是一個關聯數組,數組索引可以是字符串或數字可以使用type()函數來判斷數據類型
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type(type(X))) --> string
- Lua變量
Lua的變量類型有三種 : 全局變量, 局部變量, 作用域
在Lua中,全局變量的聲明哪怕是在語句或函數中聲明,只有前面沒有local修飾變量,都是全局變量
局部變量的聲明要在變量前加local修飾符
局部變量的作用域從聲明變量開始到所在的語句塊結束
變量的默認值均爲nil
例:
a = 5 -- 全局變量
local b = 5 -- 局部變量
function joke()
c = 5 -- 全局變量
local d = 6 -- 局部變量
end
joke()
print(c,d) --> 5 nil
do
local a = 6 -- 局部變量
b = 6 -- 全局變量
print(a,b); --> 6 6
end
print(a,b) --> 5 6
賦值
a = "hello" .. "world"
b = b + 1
Lua也可以對多個變量同時賦值
a, b = 10 b + a <---> a = 10, b = b + a
當變量個數和值個數不同時,Lua會一直根據變量個數採取措施
變量個數 > 值個數 按變量個數補足nil
變量個數 < 值個數 多餘的值會被忽略
例
a, b, c = 0, 1
print(a,b,c) --> 0 1 nil
a, b = a+1, b+1, b+2 -- value of b+2 is ignored
print(a,b) --> 1 2
a, b, c = 0
print(a,b,c) --> 0 nil nil
其中最後一種賦值方法是錯誤的,應該從依次對每個變量進行賦值
a, b, c = 0, 0, 0
print(a,b,c) --> 0 0 0
- Lua循環
While循環
while(condition)
do
statements
end
例
a=10
while( a < 20 )
do
print("a 的值爲:", a)
a = a+1
end
輸出結果
a 的值爲: 10
a 的值爲: 11
a 的值爲: 12
a 的值爲: 13
a 的值爲: 14
a 的值爲: 15
a 的值爲: 16
a 的值爲: 17
a 的值爲: 18
a 的值爲: 19
for循環
for循環分爲兩種 : 數值循環和泛型循環
數值循環
for var=exp1,exp2,exp3 do
<執行體>
end
var從exp1變化到exp2,每次以exp3的值進行增長,並且執行一次執行體,其中exp3是可選的,如果沒有指定exp3的值,那麼會默認爲1
例
for i=1,f(x) do
print(i)
end
for i=10,1,-1 do
print(i)
end
for的三個表達式在循環開始前一次性求值,以後不再進行求值。比如上面的f(x)只會在循環開始前執行一次,其結果用在後面的循環中。
function f(x)
print("function")
return x * 2
end
for i = 1, f(5) do print(i)
end
輸出結果
function
1
2
3
4
5
6
7
8
9
10
泛型循環
泛型for循環是通過一個迭代器來遍歷所有值,類似foreach語句
for i,v in ipairs(a)
do print(v)
end
i爲數組索引值,v是對應的索引數組元素值,ipairs爲一個迭代器函數
例
days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for i,v in ipairs(days) do
print(v)
end
輸出結果
Suanday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
與ipairs用法相近的迭代器函數是pairs
兩者不同在於
ipairs遍歷時不能返回nil,只能返回數字0,如果返回nil則會退出,它只能遍歷到表中出現的第一個不是整數的key
pairs則是可以遍歷表中所有的key,value
遍歷時有一點要注意就是
Lua與其他多數語言不同,迭代的下標是從1開始