开发环境 : 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)