diff --git a/docs/lua.md b/docs/lua.md index a6067cc..7bd58dd 100644 --- a/docs/lua.md +++ b/docs/lua.md @@ -427,6 +427,232 @@ repeat until (num > 20) ``` +函数 +--- + +### 初始化 + +像变量一样,如果加上 `local` 那么就是局部函数 + +```lua +local function main() + print("这是一个局部函数") +end +``` + +--- + +你也可以将函数赋值给一个变量 + +```lua +local main = function() + print("这是一个局部函数") +end +``` + +### 返回值 + +```lua +local function min(a, b) + if (a < b) then + return a + else + return b + end +end + +print(min(1, 2)) +``` + +### 参数 + +```lua +local p = function(res) + print("打印自己的风格", res) +end + +local function main(a, b, p) + p(a + b) +end + +main(1, 2, p) +``` + +### 多个返回值 + +```lua +local function min(a) + local sum = 0 + local factorial = 1 + for i, v in pairs(a) do + sum = sum + v + factorial = factorial * v + end + return sum, factorial +end + +local a, b = min({ 1, 2, 3, 4 }) + +print(a, b) +``` + +### 可变参数(`...`) + +```lua +local function average(...) + local result = 0 + local arg = { ... } + for i, v in ipairs(arg) do + result = result + v + end + return result / #arg +end + +print("平均值为", average(1, 3, 5, 7, 9, 11)) +``` + +字符串 +--- + +### 字符串方法 + + +```lua +-- 全部转换为大写 +string.upper("str") -- STR + +-- 全部转换为小写 +string.lower("STR") -- str + +-- 指定替换的字符串个数, 最后一个参数可选,默认是全部替换 +string.gsub("aaaa", "a", "b", 3) -- bbba 3 +string.gsub("Today is 29/01/2019", "%d%d/%d%d/%d%d%d%d", "good day.") +-- Today is a good day. 1 + +-- 查找第一个匹配的字符串,第三个参数可以提供开始查找的位置,默认从 1 开始 +-- 如果未找到,则返回 nil +string.find("referference", "fer") -- 3 5 +string.find("Today is 29/01/2021", "%d%d/%d%d/%d%d%d%d") -- 10 19 + +-- 字符串反转 +string.reverse("fw") -- wf + +-- 格式化字符串 +string.format("value:%c", 1) -- value:a + +-- 转换字符并拼接 +string.char(97,98,99,100) -- abcd + +-- 将字符转化为整数值。 int 用来指定某个字符,默认第一个字符 +string.byte("ABCD",4) -- 68 + +-- 计算字符串长度 +string.len("abc") -- 3 + +-- 返回字符串的 n 个拷贝 +string.rep("fw", n) -- fwfw + +-- 剪切字符串,第三个参数可选,默认是字符串长度 +string.sub("referference", 5, 6) -- rf +``` + +### 正则匹配 + +:- | :- +:- | :- +`%a` | 与任何字母配对 +`%c` | 与任何控制符配对(例如\n) +`%d` | 与任何数字配对 +`%l` | 与任何小写字母配对 +`%p` | 与任何标点(punctuation)配对 +`%s` | 与空白字符配对 +`%u` | 与任何大写字母配对 +`%w` | 与任何字母/数字配对 +`%x` | 与任何十六进制数配对 +`%z` | 与任何代表0的字符配对 + + +#### match + +第三个参数可选,默认从 1 开始。如果没有捕获组返回整个字符串,匹配失败返回 nil + +```lua +string.match( + "I have 2 questions for you.", + "(%d+) (%a+) " +) -- 2 questions +``` + +#### gmatch + +返回一个迭代器函数,每次调用迭代器函数,如果参数 pattern 描述的字符串没有找到,迭代函数返回nil + +```lua +for world in string.gmatch("I have 2 questions for you.", "%a+") do + print(world) +end +-- I +-- have +-- questions +-- for +-- you +``` + + + +table +--- + +### 初始化数组 + +初始化一个空数组 + +```lua +local array = {} +``` + +--- + +默认的数组索引从 1 开始 + +```lua +local array = { "a", "b", "c", "d" } +array[5] = "e" + +for i = 1, 5 do + print(array[i]) +end +``` + +### 多维数组 + +```lua +local array = { + { "a", "b", "c" }, + { "d", "e", "f" } +} + +for i = 1, 2 do + for j = 1, 3 do + print(array[i][j]) + end +end +``` + +### 初始化 table + +```lua +local table = {} + +table.name = "fw" +table.age = "18" +table["sex"] = "boy" + +-- 如果想要删除一个 table,那么可以使用 nil 赋值 +table = nil +print(table) +``` + 另见 ----