Table(表)
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
Lua table 是不固定大小的,你可以根据自己需要进行扩容。
print("========表========");
print("========字典========");
-- 字典是个键值对构成的
a = {
["name"] = "player",
["age"] = 18,
["5"] = 5
};
-- 访问单个变量
print(a["name"]);
print(a.name);
print(a.age);
-- print(a.5);如果想点出来,不能用数组做键。
-- 删除
a["5"] = nil;
print(a["5"]);
for k, v in pairs(a) do
print(k, v);
end
for k in pairs(a) do
print(k);
print(a[k]);
end
print("========类和结构体========");
-- lua中默认没有面向对象的,需要自己来实现
Student = {
name = "张三",
age = 18,
sex = true,
up = function()
-- print(age);这样是不可以的这里的age和表中的不是一个
print(Student.age)
print("成长");
end,
learn = function(t)
print(t.age);
print("学习");
end
};
Student.name="李四";
print(Student.up());
print(Student.name);
function Student.speak()
print("说话");
end
print(Student.speak());
Student.learn(Student);
--冒号的作用就是:定义函数时,给函数的添加隐藏的第一个参数self;调用函数时,默认把当前调用者作为第一个参数传递进去。
Student:learn();
function Student:f1()
--lua 中self关键字表示默认把调用者当第一个参数
print(self.name.."要打人");
end
Student:f1();
print("========表的公共操作========");
t1={{age=1,name="nn"},{age=1,name="22"}};
t2={name="88",sex=true};
--插入
table.insert(t1,t2);
print(t1[3].name);
--删除 如果只传入T1默认删除最后一张表,填了参数,就删除对应的参数
table.remove(t1,1);
print(#t1);
print(t1[2].name);
--排序
t3={8,6,10,0,2};
table.sort(t3);
for i, v in ipairs(t3) do
print(v);
end
--降序
table.sort(t3,function (a,b)
if(a>b)then
return true;
end
end)
for i, v in ipairs(t3) do
print(v);
end
--拼接
t4={"oo","bb","yy","rr"}
str=table.concat(t4,":");
print(str);
Require
print("=======全局变量和本地变量=========")
--全局变量只要不加local就是全局binaliang
a=1;
b="name";
for i = 1, 10 do
c="张三";
end
print(c);
--局部变量
for i = 1, 10 do
local d="李四";
end
print(d);
print("=======多脚本执行=========")
--require("脚本名")
require("test12");
print(names);
f1();
print("=======脚本卸载=========")
--只要加载一次了不会再次加载
require("test12");
--判断是否被加载了
a= package.loaded["test12"];
print(a);
--只要弄成nil就卸载了
package.loaded["test12"]=nil;
require("test12");
print("=======大G表=========")
--_G表是一个总表,声明的所有的全局变量都在G表里
for k, v in pairs(_G) do
print(k,v);
end
print("我是test12");
names="oo";
local age=18;
function f1()
print("这是一个函数!")
end
Lua特殊用法
多变量赋值,多返回值,and or
print("==========特殊用法==========");
print("==========多变量赋值==========");
--如果赋值的变量多了会自动省略,如果赋值的变量少了会成为nil
a,b,c=1,5,"df";
print("==========多返回值==========");
function func()
return 12,4,5,10
end
a,b,c= func();
print(a);
print(b);
print("==========and or==========");
--[[
and 和 or 不但可以连接boollean类型的,可以连接任何类型
在lua中只有nil和false才会认为是假
“短路” 对于and来说有假为假,对于or来说有真为真所以他们只进行第一个就停止判断了
]]
print(1 and 2);
print(false and 2);
print(0 and 9);
print(true or 9);
--lua 不支持三目运算符
x=3;
y=7;
local res=(x>y) and x or y
print(res);