Skip to content

Commit

Permalink
doc: update lua.md (jaywcjlove#139) (jaywcjlove#62)
Browse files Browse the repository at this point in the history
  • Loading branch information
fwqaaq authored Nov 18, 2022
1 parent e0afdef commit 7ea215d
Showing 1 changed file with 226 additions and 0 deletions.
226 changes: 226 additions & 0 deletions docs/lua.md
Original file line number Diff line number Diff line change
Expand Up @@ -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))
```

字符串
---

### 字符串方法
<!--rehype:wrap-class=col-span-2-->

```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的字符配对
<!--rehype:className=left-align-->

#### 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
```

<!--rehype:className=style-round wrap-text-->

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)
```

另见
----

Expand Down

0 comments on commit 7ea215d

Please sign in to comment.