skyClass是lua
的基于元表的class
库
- 构造函数
- 继承
- 允许自定义元方法
- 简单反射
- 类型绑定
该库加入了基于EmmyLua的类型注释,建议使用EmmyLua插件以获得较好的类型提示
require("class")
---@class a
a = class("a")
-- 构造函数
function a:ctor(name)
self.name = name
self.age = 0
end
-- 创建实例
local a1 = a:new("张三")
a1.age = 12
local a2 = a:new("李四")
a2.age = 14
print(a1.name,a1.age)
print(a2.name,a2.age)
输出
张三 12
李四 14
require("class")
---@class a
a = class("a")
function a:ctor(name)
self.name = name
self.age = 0
end
---* 自定义方法
---@pram year number
function a:grow(year)
self.age = self.age + year
end
local a1 = a:new("张三")
a1.age = 12
a1:grow(4)
print(a1.name,a1.age)
输出
张三 16
require("class")
---@class a
a = class("a")
a.MONEY = 0
function a:ctor(name)
end
---@parm num number
function a.AddMoney(num)
a.MONEY = a.MONEY + num
end
a.AddMoney(1000)
local a1 = a:new()
a1.AddMoney(1000)
print(a.MONEY,a1.MONEY)
输出
2000 2000
require("class")
---@class a
a = class("a")
function a:ctor(name)
self.name = name
self.age = 0
end
---@pram year number
function a:grow(year)
self.age = self.age + year
end
local super
---@class b:a
b = class("b",a)
function b:ctor(name)
a.ctor(self,name)
self.money = 0
end
---@pram num number
function b:earn(num)
self.money = self.money + num
end
local b1 = b:new("李四")
b1.age = 14
b1:grow(5)
b1:earn(5000)
print(b1.name,b1.age,b1.money)
输出
李四 19 5000
require("class")
---@class a
a = class("a")
function a:ctor()
self.num = 0
end
function a:__add(other)
local new = a:new()
new.num = self.num + other.num
return new
end
local a1 = a:new()
a1.num = 10
local a2 = a:new()
a2.num = 5
local a3 = a1 + a2
print(a1.num,a2.num,a3.num)
输出
10 5 15
注意:不要覆盖__index
与__newindex
方法