Lua基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#!/usr/local/bin/lua

print("hello world!")
--单行注释
--[[
多行注释
多行注释
]]--

-- 默认变量被认为是全局的,全局变量不需要声明
print(A)
A = 10
print(A)
-- 删除一个全局变量,只需将变量赋值为nil

--[[
数据类型
nil
boolean
number 双精度类型的实浮点数
string 单双引号的字符串
function c或lua编写的函数
userdata 任意存储在变量中c数据结构
thread 执行的独立线路,用于执行协同程序
table 关联数组,数组的索引可以是数字、字符串或表类型。table的创建是通过构造表达式来完成,最简单构造表达式{} 空表
]]--
print(type("hello world!"))
print(type(3.14*3))
print(type(print))
print(type(type))
print(type(true))
print(type(nil))

-- .. 字符串链接符
Tab1 = {key1 = "val1", key2 = "val2", "val3"}
for k,v in pairs(Tab1) do
print(k .. " - " .. v)
end

Tab1.key1 = nil
for k,v in pairs(Tab1) do
print(k .. " -- " .. v)
end

-- 字符串块
local gocode = [[
package main

import "fmt"

func main() {
fmt.Println("hi ropon!")
}
]]
print(gocode)

print(3.14 .. 15926)

-- #来计算字符串的长度
Str1 = "www.ropon.top"
print(#Str1)

-- 创建一个空的table
local tab1 = {}
-- 直接初始化表
local tab2 = {"go", "python", "php", "lua"}

print(...)
local a = {}
a["key"] = "val"
local key = 10
a[key] = 18
a[key] = a[key]+1
for k,v in pairs(a) do
print(k .. " : " .. v)
end
-- 注意表的索引默认是从1开始
print(...)
for k, v in pairs(tab2) do
print("key", k)
end
-- 函数
function Func1(n)
if n == 0 then
return 1
else
return n* Func1(n -1)
end
end

print(Func1(5))
local func2 = Func1
print(func2(5))
-- 匿名函数
function TestF1(tab, fun)
for k ,v in pairs(tab) do
print(fun(k,v))
end
end
local tab={key1="val1", key2="val2"};
TestF1(tab,
--匿名函数
function(k,v)
return k.."="..v;
end)
-- 循环
-- while true do

-- end

-- for index, value in ipairs(t) do

-- end

-- for key, value in pairs(t) do

-- end

-- 字符串操作方法
print(string.upper("ropon"))
print(string.lower("Ropon"))
-- 要操作的字符串/被替换的字符/要替换的字符/替换几次
print(string.gsub("www.ropon.top","ropon","pengge",1))
print(string.find("www.ropon.top","ropon",1))
print(string.reverse("ropon.top"))
print(string.format("my name is %s,age is %d","ropon",18))
print(string.len("ropon.top"))
print(string.sub("www.ropon.top",1,3))

-- 数组 索引默认从1开始,也可以从0开始
local arr1 = {"golang","lua"}
for i=0,2 do
print(arr1[i])
end

local arr2 = {}
for i = -2, 2 do
arr2[i] = i*2
end

for i = -2, 2 do
print(arr2[i])
end
-- 多维数组
local arr3 = {}
for i = 1, 3 do
arr3[i] = {}
for j = 1, 3 do
arr3[i][j] = i*j
end
end

for i=1,3 do
for j=1,3 do
print(arr3[i][j])
end
end

require("module")

print(module.constant)
module.func3()

local m = require("module")
m.func1()

local req = require("socket.http")
body,ret = req.request("https://ip.ropon.top")
print(body)