1.制作模块 (模拟c#中的静态类)
2用table制作元素表
5.引用Lua模拟类
calc={} --初始化模块
--定义变量
calc.name="KiwiClac";
--定义函数
function calc.jia(a,b)
return a+b;
end
function calc.jian(a,b)
return a-b;
end
--结束模块
return calc;require("calc") --引用模块可以用 require calc 引用
--访问模块变量
print(calc.name);
--访问模块函数
print(calc.jia(1,2));2用table制作元素表
--设置元素表
tableA={} --表A[主表]
tableB={} --表B[元表/子表]
--设置tableB为tableA的元表
setmetatable(tableA,tableB);
--判断tableA是否有元素
print(getmetatable(tableA));
table表访问元表:tableA={name="Kiwi",age=12};
tableB={gender="x",address="烟台"};
setmetatable(tableA,tableB);
tableB.__index=tableB --设置元表的__index索引
print(tableA.name,tableA.age);
--print(tableA[name],tableA[age]);
print(tableA.gender,tableA.address);
3.模拟c#中的类
--模拟c#中的类
Person={name,age,gender,address="China"} --在Person类中模拟字段
--模拟构造方法
function Person:New()
local obj={} --初始化一个新的表
setmetatable(obj,Person); --把当前的类[表]设置为新表的元表
Person.__index=Person; --指定元表的__index索引
return obj;
end
--模拟一个方法
function Person:Show()
print(self.name,self.age,self.gender,self.address);
end
--实例化对象
p1=Person:New()
p1.name="ade";
p1.age="1";
p1.gender="df";
p1.address="dfada";
p1:Show();
--模拟类的继承
--父类
Animal={name};
--构造方法
function Animal:New(name)
local obj={};
setmetatable(obj,self);
self.__index=self;
self.name=name;
return obj;
end
--普通方法
function Animal:Tostring()
print(self.name);
end
--子类/继承模拟
Cat=Animal:New();
--子类的构造方法
function Cat:New(name)
local obj=Animal:New(name);
setmetatable(obj,self);
self.__index=self;
return obj;
end
--子类普通方法
function Cat:Eat(food)
print(Cat.name.."Eat"..food);
end
--实例化
jfm=Cat:New("加菲猫");
jfm:Eat("yu");5.引用Lua模拟类
dofile([路径名]脚本名.lua)
例:
1.以当前脚本为定位点寻找所要引用的脚本
dofile(“1.Lua”)--脚本在同一个文件夹
dofile("文件夹名\\1.lua") --所要引用的脚本在与当前脚本同级的文件夹中
dofile(“..\\1.lua”)--"..\\"是返回上一级,当前脚本的文件夹与所引用脚本在同 一级中
2.使用绝对路径
dofile(“c:\\dfa\\dfa\\1.lua”)
注意:保存的脚本要以.lua结尾
这篇博客介绍了如何在Lua中模拟C#的类结构,通过`dofile`函数加载和引用不同层级的Lua脚本文件。文章详细讲解了相对路径和绝对路径的使用,并强调了保存脚本时需以.lua为后缀的重要性,从而在实际项目中实现热更新功能。
4058

被折叠的 条评论
为什么被折叠?



