Lua 基本语法学习笔记(三)

Source

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