邱 璇洛 (ゝ∀・)

邱 璇洛 (ゝ∀・)

你好哇(*゚∀゚*)~这里是邱璇洛的博客,常常用来记录一些技术文章和小日常~(σ゚∀゚)σ
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)
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。