-
Notifications
You must be signed in to change notification settings - Fork 0
/
009_ComplexDataType.lua
122 lines (104 loc) · 3.77 KB
/
009_ComplexDataType.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
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by 86176.
--- DateTime: 2022/12/7 22:30
---
-- 字典 定义(字典由键值对构成,访问遍历用中括号填键访问)
dictionary = { ["Name_Lua"] = "Lua", ["Name_C#"] = "C#", ["Name_Cpp"] = "C++" };
-- 字典 查(自定可以通过成员变量的形式获取到值,但是不能是数字或符号)
print(dictionary["Name_Lua"]);
print(dictionary["Name_C#"]);
print(dictionary.Name_Cpp);
-- 字典 改
dictionary["Name_C#"] = "C++++";
print(dictionary["Name_C#"]);
-- 字典 增
dictionary["Name_Java"] = "Java";
print(dictionary.Name_Java);
-- 字典 删(置空就可以,无法删除)
dictionary["Name_C#"] = nil;
print(dictionary["Name_C#"]);
-- 字典 遍历
for key, value in pairs(dictionary) do
print("字典遍历获取键值对(写法1) :" .. key, value);
end
for key in pairs(dictionary) do
print("字典遍历根据键获取值(写法2) :" .. dictionary[key]);
end
for _, value in pairs(dictionary) do
print("字典遍历获取键值对(写法3) :" .. value);
end
-- 类和结构体 定义(lua 中默认没有面向对象,需要自己实现,没有 new 关键字)
Student = {
age = 22,
sex = true,
Up = function(content, student)
-- 想要在表内部函数中调用表本身字段或函数需要指明是谁 Student.age ,而不能直接调用。
print("第一种方式指明是谁 :" .. Student.age);
print("第二种方式把调用者传进来 :" .. student.age);
print("函数声明方式1 " .. content);
end,
Learn = function(mySelf)
print(mySelf.name);
end
}
-- 声明表后,在表外去声明表里有的字段和函数。
Student.name = "李四";
Student.Speak = function()
print("函数声明方式2....");
end;
function Student.Speak2()
print("函数声明方式3....");
end;
function Student:Speak3()
-- 这里因为是通过冒号声明所以会默认有第一个参数,所以这里的 self(self : 调用第一个参数) 可以直接调用。
-- self 就是用来冒号声明时作为第一个参数的代表,注意 self 不是 this。
print(self.name .. "函数声明方式4....");
end;
-- lua 中类的表现更像是静态类的感觉直接点出来。
Student.Up(string.format("%s 升级!", Student.name), Student);
Student.Speak();
Student.Speak2();
-- 重点 面试考点(lua 中 . 和 : 的区别)
-- . 调用需要传入第一个参数(正常调用)。
Student.Learn(Student);
-- : 调用会默认把调用者作为第一个参数传入方法中(冒号只能可以外部声明函数,冒号声明相当于有一个默认参数 可以通过 self 调用出来)。
Student:Learn();
Student:Speak3();
-- 表的公共操作
table_1 = { { name = "李一", age = 11 }, { name = "王二", age = 12 } };
table_2 = { name = "张三", age = 13 };
table_3 = { name = "李四", age = 14 };
-- 表 插入
table.insert(table_1, table_2);
table.insert(table_1, table_3);
print(#table_1);
print(table_1[1].name);
print(table_1[2].name);
print(table_1[3].name);
print(table_1[4].name);
-- 表 删除
table.remove(table_1, 1);
print("移除了表里第一个元素 :" .. table_1[1].name);
print(#table_1);
-- 表 排序
tableNumbers = { 1, 3, 4, 2, 5, 7, 1, 9, 3, 7 };
table.sort(tableNumbers);
for index in pairs(tableNumbers) do
print("排序升序 - " .. tableNumbers[index]);
end
table.sort(tableNumbers, function(a, b)
-- 这里就是升降排序规则的逻辑
if a > b then
return true;
end
end);
for index in pairs(tableNumbers) do
print("排序降序 - " .. tableNumbers[index]);
end
-- 表 拼接
tb = { 1, 2, "Three", 4, 5 };
print(table.concat(tb, " - "));
-- 多脚本执行
local testLocal = "局部变量,可以被返回出去";
return testLocal