上一回分享的是,Lua 標準函式庫
今天想來探索 Lua 條件判斷與迴圈控制,再次回到 CC: Tweaked Computer 的開機訊息程式碼
motd.lua
local date = os.date("*t")
if date.month == 1 and date.day == 1 then
print("Happy new year!")
elseif date.month == 12 and date.day == 24 then
print("Merry X-mas!")
elseif date.month == 10 and date.day == 31 then
print("OOoooOOOoooo! Spooky!")
else
local tMotd = {}
for sPath in string.gmatch(settings.get("motd.path"), "[^:]+") do
if fs.exists(sPath) then
for sLine in io.lines(sPath) do
table.insert(tMotd, sLine)
end
end
end
if #tMotd == 0 then
print("missingno")
else
print(tMotd[math.random(1, #tMotd)])
end
end
我將上述程式碼只擷取條件判斷的部分,結構如下true
和 false
只是我任意給的值
不過,有人看出來,這樣實際上日期是哪一天嗎 XD?
if true and false then
print("Happy new year!")
elseif false and false then
print("Merry X-mas!")
elseif false and true then
print("OOoooOOOoooo! Spooky!")
else
if false then
print("missingno")
else
print(tMotd[math.random(1, #tMotd)])
end
end
而除了 and
之外,還可以用 or
和 not
if false or nil then -- nil 也是 false
print(1)
elseif not true then -- not true = false
print(2)
elseif 0 or false then -- 0 是 true !
print(3)
elseif 123 and false and not 'abc' then -- 除了 false 和 nil,任何值都是 true
print(4)
else
print(5)
end
介紹完 if 之後當然就來介紹 switch ...
.....
不是,Lua 沒有原生支援 switch 語法
但網路上有人分享一些模擬寫法
以鐵人 lagagain 的文章為例
https://ithelp.ithome.com.tw/articles/10243929
option = "one"
switch = {
["one"] = function () print "run one" end,
["tow"] = function () print "run two" end,
}
switch[option]() -- => run one
for 迴圈的部分,上述的程式碼主要結構如下,有著 foreach 的概念
for sLine in io.lines(sPath) do
table.insert(tMotd, sLine)
end
也可以明確指定初始值、結束值、遞增值
for i = 1, 10, 1 do -- 初始值、結束值、遞增值
print(i)
end
如果要中途脫離迴圈,可以用 break
,跟其他語言的用法沒什麼不同
但是 Lua 沒有 continue
!
這部分就必須自己用邏輯去實了
有了 for 就也要談談 while 了,結構如下
while(condition)
do
-- statement
end
那麼 do .. while 呢?
Lua 沒有 do .. while,有的是 repeat .. until
repeat
-- statement
until(condition)
今天的探索就到這裡,下一回我將繼續深入 CC: Tweaked Computer 挖礦!