邱 璇洛 (ゝ∀・)

邱 璇洛 (ゝ∀・)

你好哇(*゚∀゚*)~这里是邱璇洛的博客,常常用来记录一些技术文章和小日常~(σ゚∀゚)σ
twitter
tg_channel

Lua入門

開發環境 : 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)
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。