開發環境 : MacOS
Lua 5.4.4
外部連結 :菜鳥教程 - Lua
簡介#
Lua,名字來源於月球。是一門非常簡單,快速,強大的腳本語言,以被低估著稱。
基本語法#
Lua 十分簡單,簡單到你只需要一個下午就可以簡單掌握。
Hello World!#
print("Hello World")
註釋#
-- 短註釋
--[[
長註釋
--]]
變量#
在默認情況下,變量總是認為是全局的。
全局變量不需要聲明,給一個變量賦值後即創建了這個全局變量,訪問一個沒有初始化的全局變量也不會出錯,只不過得到的結果是:nil
—— 菜鳥教程 / Lua 基本語法
local
關鍵字用來設定為局部變量
-- 全局變量
variable = 123
-- 設置局部變量
local local_variable = "string"
-- 長變量
many_line_text = [[
/ _
(__(/(/
Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio
]]
基本類型#
除了把NULL
換成了nil
其他沒有區別(了解更多)。
-- 空
nil_variable = nil
print(nil_variable)
操作變量#
連接兩個變量#
-- 連接變量
local link_str_a = "astr"
local link_str_b = "bstr"
local str_c = link_str_a..link_str_b
print(str_c)
類型轉換#
-- 類型轉換
local int_a = tostring(10)
print(type(int_a))
int_a = tonumber(int_a)
print(type(int_a))
命令行輸出變量的各種方式#
-- 全局變量
variable = 123
-- 設置局部變量
local local_variable = "string"
print("var = ", variable, "local var = ", local_variable)
print(string.format("var = %d, local var = %s", variable, local_variable))
陣列和下標#
注意⚠️:
Lua 的陣列是從 1 開始數的,不是從 0!!!
-- 陣列
array = {233, "qwq", 996, "樂"}
print(array[1])
-- 插入
-- 在末尾插入
table.insert(array, "插入了新元素")
-- 在中間插入
table.insert(array, 2, "第二個元素變了")
-- 插入不是改變,之前第二個現在變成了第三個
print(array[5]) -- 插入了新元素
print(array[2]) -- 第二個元素變了
print(array[3]) -- qwq
-- 移除
-- 移除了第二個元素
table.remove(array, 2)
print(array[2]) -- 第二個元素變了,第三個元素變成了第二個
-- 將移除元素賦值
local remove_number = table.remove(array, 1)
-- 此時,remove_number = 233(array[1]), array[1] = "qwq"
print(array[1])
print(remove_number)
-- 下標
str_array = {
str_a = "a",
int_a = 123456,
-- 奇怪的下標
[";;,fun"] = "233"
}
print(str_array["str_a"])
-- or
print(str_array.int_a)
-- and
print(str_array[";;,fun"])
-- 賦值
str_array["abuc"] = "223"
print(array.abuc)
函數和判斷#
-- 函數和if
function calculate(symbol, a, b)
-- lua中的不等於用`~=`表示
--[[
`or` == `||`
`and` == `&&`
`not` == true -> false or false -> true
--]]
if ((type(symbol) ~= "string" or (type(a) or type(b)) ~= "number")) then
print("錯誤:未知輸入類型")
return nil
end
if (symbol == "+") then
return a+b
elseif (symbol == "-") then
return a-b
elseif (symbol == "*") then
return a*b
elseif (symbol == "/") then
return a/b
else
print("錯誤:未知符號類型")
return nil
end
end
print(calculate("+", 1, 2))
各種循環#
-- 循環
while_var = 0
-- 在循環前判斷
while (while_var < 3) do
while_var = while_var + 1
end
print("while_var ->", while_var)
-- 在循環後判斷
repeat
while_var = while_var + 1
until (while_var > 5)
print("while_var ->", while_var)
-- i=3 每進行一次循環 i = i-1 直到 i==1
for i=3, 1, -1 do
print(i)
end
-- 泛型for循環
for i, v in ipairs(array) do
print(i, v)
end
-- lua支持嵌套循環
more_array = {}
for i=1, 3 do
more_array[i] = {}
for j=1, 3 do
more_array[i][j] = i*j
end
end
-- 訪問陣列
for i=1,3 do
for j=1,3 do
print(string.format("%d ", more_array[i][j]))
end
end
多文件編程 (包)#
在 Lua 中,我們可以使用require(包名)
輕鬆調用包,不過注意,require
默認是會在項目根目錄中查找包文件,而不是代碼文件所在的工作目錄,如果你把包放到了別處,比如這樣:
項目目錄
代碼存放目錄(src)
main.lua
mod.lua
你就需要在調用時告訴require
她的位置:
-- 在項目的src目錄查找mod這個包
require(src.mod)
實例#
在同一目錄下創建mod.lua
-- mod.lua
-- 這是一個包
mod = {}
mod.constant = "這是一個常量"
mod.constant_two = "這是另一個常量"
-- 這是一個公有函數
function mod.add(a, b)
return a+b
end
-- 這是一個私有函數
local function subtraction(a, b)
return a-b
end
-- 調用
function mod.open_sub(a, b)
subtraction(a, b)
end
return mod
在main.lua
調用
-- 調用包
require("mod")
-- 使用
print(mod.add(1, 2))
雜#
獲取陣列,變量的長度#
-- 獲取長度
local local_variable = 123
array = {1, 2, 3, 4, 5}
-- 加 `#`
print(#array)
print(#local_variable)