做网站公司北京,vue做网站cms,wordpress 导航下拉,怎么删掉安装的wordpress0.简单前言
1、面向对象主要四个特征#xff1a;封装#xff0c;继承#xff0c;多态#xff0c;抽象 2、Lua是种简单精致小巧的语言#xff0c;其本质是个表#xff08;table#xff09;#xff0c;变量和方法皆可看作为该表的元素。
P.S. 该博客和代码为个人编写习…0.简单前言
1、面向对象主要四个特征封装继承多态抽象 2、Lua是种简单精致小巧的语言其本质是个表table变量和方法皆可看作为该表的元素。
P.S. 该博客和代码为个人编写习惯以及为后续博客内容拓展服务考虑若有错误等不周到的地方还请包涵以及指出。
1.类
尽管可能不太完美但我们依旧可以通过元表的方式实现类以及类的继承。
-- 元类
local Rectangle {area 0, length 0, breadth 0}-- 派生类的方法 new
function Rectangle:new (o,length,breadth)local o o or {}setmetatable(o, self) -- 将Rectangle赋值给要返回的对象作为元表self.__index self -- 通过 .__index 传递元表元素self.length length or 0self.breadth breadth or 0self.area length*breadth;return o
end-- 派生类的方法 printArea
function Square:printArea ()print(矩形面积为 ,self.area)
end简单结构就是这样Square类已经继承Rectangle的属性以及方法同时还拓展出自己的新方法 printArea()但实际运用起来并不方便。
2.改进
class类
用于构建模板以及进行类的继承
Class.lua
-- params要实例的类继承
function class(classname , ...)local cls {}local supers {...}for _ , super in ipairs(supers) dolocal superType type(super)if superType function thencls.__create superelseif superType table thencls.__supers cls.__supers or {}cls.__supers[#cls.__supers 1] superendendcls.__index clscls.__class classnameif not cls.__supers then-- 没有继承其他类-- 添加默认构造函数-- __index指向自己不变cls.Ctor function() end elseif #cls.__supers 1 then-- 单继承的情况local super cls.__supers[1]cls setmetatable(cls , {__index super})cls.super super -- 模拟super关键字else -- 多继承的情况-- 使index指向一个函数在索引时遍历父类cls setmetatable(cls , {__index function(_ , key)for _ , super in ipairs(cls.__supers) doif super[key] thenreturn super[key]endendend})endcls.New function(...)-- 前面只是将几个类进行合并因此在实例时还需进行一次元表local instance setmetatable({}, cls)instance.class clsinstance:Ctor(...)return instanceend-- 返回实例return cls
end实验
创建4个脚本ABCD。 使得C继承A D继承AB。
A.lua
A class(A)function A:Ctor()print(We create a class A!)
endfunction A:Fun_A()print(This is a function from class A!)
endreturn AB.lua
B class(B)function B:Ctor()print(We create a class B!)
endfunction B:Fun_B()print(This is a function from class B!)
endreturn BC.lua
C class(C , A) -- 让C类单独继承A类function C:Ctor()print(We create a class C!)
endfunction C:Fun_C()print(This is a function from class C!)
endreturn CD.lua
D class(D , A , B) -- 让D类同时继承AB类function D:Ctor()print(We create a class D!)
endfunction D:Fun_D()print(This is a function from class D!)
endreturn D检验
main.lua
-- 实例以及覆写方法
local test_c C:New()
local test_d D:New()-- 子类自身的方法
test_c:Fun_C()
test_d:Fun_D()-- 子类继承的方法
test_c:Fun_A()
test_d:Fun_A()
test_d:Fun_B()-- 没有继承的方法
-- test_c:Fun_B()结果
We create a class C!
We create a class D!
This is a function from class C!
This is a function from class D!
This is a function from class A!
This is a function from class A!
This is a function from class B! 若把注释取消则直接报attempt to call a nil value (method ‘Fun_B’)