27. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
資料型態 (data types) 與運算子 :
與其他語言比較不同的是 Lua 用 ~= 表示不等於 (C/Java/PHP 等使用 !=), 例如 :
if (nil ~= false) then print("不相等") end --> 印出 不相等
if (2.2>0) then print("正數") end --> 印出 正數
注意, 資料型態不同的變數不能使用關係運算子加以比較, 特別是比大小運算子 ( >, <, >=, <=) 會出現
錯誤訊息. 例如 :
> if ("OK">0) then print("正數") end
stdin:1: attempt to compare number with string
stack traceback:
stdin:1: in main chunk
[C]: in ?
28. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
資料型態 (data types) 與運算子 :
必須是相同資料型態才能進行含有大小的比較, 例如 :
if ("smart">"rich") then print("smart is better") --> 印出 smart is better
else print("rich is better")
end
而 == 與 ~= 這兩個與大小無關的運算即使資料型態不同也不會出現錯誤, 例如 :
if ("knowledge" == 0) then print("idiot")
else print("expert") end --輸出 "expert"
事實上, == 與 ~= 運算會先去看兩個運算元資料型態是否相同, 然後再去比較其內容. 前者 == 會先看資
料型態是否相同, 如果不同就直接傳回 false (不用比內容啦!), 型態相同才去比較內容, 相同傳回 true,
不同傳回 false, 例如 :
29. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
資料型態 (data types) 與運算子 :
if 1==true then --資料類型不同傳回 false
print("same")
else
print("different") --輸出 different
end
if ("power" == "power") then print("power is power")
else print("power is not power") end --輸出 "power is power"
if ("knowledge" == "power") then print("knowledge is power")
else print("knowledge is not power") end --輸出 "knowledge is not power"
30. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
資料型態 (data types) 與運算子 :
而 ~= 運算只要型態不同, 就直接傳回 true 了; 若型態相同才去比內容, 相同傳回 false, 不同傳回 true,
例如 :
if ("money" ~= 0) then print("have money")
else print("have no money") end --輸出 "have money"
if ("knowledge" ~= "power") then print("knowledge is not power")
else print("knowledge is power") end --輸出 "knowledge is not power"
對於 table, function 等物件, 變數儲存的是參考 (指向實際的資料儲存位置), == 與 ~= 運算比較的是其
參考, 例如 :
31. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
資料型態 (data types) 與運算子 :
t1={1,2,3}
t2={1,2,3}
if t1==t2 then print("same")
else print("different") --輸出 different (t1 與 t2 是不同參考)
end
t3=t1 --複製參考, t3 與 t1 指向同一個 table
if t1==t3 then print("same") --輸出 same
else print("different")
end
上例之 t1 與 t2 雖然內容相同, 但參考不同, 故 t1==t2 運算傳回 false, 而 t3=t1 是複製參考, 兩者指向
同一個 table, 故 t1==t3 傳回 true.
37. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
資料型態 (data types) 與運算子 :
也可以用十六進位表示, 但要加一個小寫 x (不能用大寫 X) :
print("x41x42x43") --> 印出 ABC
參考 : Wiki : ASCII
對於可能會超過一行長字串, 為了編輯的方便需要拆成數行時, Lua 提供兩個方式來輸入長字串, 第一
個是用 [[ 與 ]] 符號來包圍一塊長字串區域, 例如 :
a=[[This is a very
very
very ...
long story.]]
print(a)
印出的結果與編輯時的樣子相同, 會保留所有的空格.
38. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
資料型態 (data types) 與運算子 :
第二個方法是用跳脫字元 z 來串接長字串, 例如 :
a="This is a very z
very z
very ... z
long story."
print(a) --> 印出 This is a very very very ... long story.
可見使用 z 不會保留空格, z 會直接串接到下一行的非空白字元.
Lua 取得字串長度是在字串前面加個 "#", 例如 :
print(#"ABC") --> 印出 3
a="Hello World!"
print(#a) --> 印出 12
59. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
流程控制 :
(1). 判斷 :
Lua 的判斷式語法如下 :
判斷式 語法 範例
單向
(單條件)
if 條件式 then
敘述
end
if score >= 60 then
print ("及格")
end
雙向
(單條件)
if 條件式 then
敘述
else
敘述
end
if score >= 60 then
print ("及格")
else
print ("不及格")
end
巢狀
(多條件)
if 條件式 then
敘述
elseif 條件式 then
敘述
else
敘述
end
if score >= 90 then
print ("優等") elseif score >= 80 and score < 90 then
print ("甲等")
elseif score >= 70 and score < 80 then
print ("乙等")
else
print ("丙等")
end
60. Corona 初探 Lua 語言,
玩跨平台(iOS & Android) 行動裝置開發工具
流程控制 :
(2). 迴圈 :
Lua 只有 for 與 while 兩種迴圈, 沒有 do while 迴圈. 注意 while 迴圈必須控制條件式設定終止條件,
以免成為無窮迴圈. 如果要拜訪表格元素, 可以使用內建函數 pairs() 來取得每一組鍵-值對.
迴圈 語法 範例
for 迴圈
(確定次數)
for 起始值, 終止值 do
敘述
end
local sum=0
for i=1,10 do
sum=sum + i
end
for 迴圈
(遍歷表格)
for key,value in pairs(表格) do
敘述
end
local t={name="Tony",age=50}
for key,value in pairs(t) do
print(key, value)
end
while 迴圈 (不確定次數)
while 條件式 do
敘述
條件運算式
end
local sum=0 local i=1
while i <= 10 do
sum=sum + i i=i + 1
end
print(sum)