# skyClass **Repository Path**: roubincode/skyClass ## Basic Information - **Project Name**: skyClass - **Description**: a lua class - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-22 - **Last Updated**: 2022-04-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # skyClass **skyClass**是`lua`的基于元表的`class`库 ## 功能: - [x] 构造函数
- [x] 继承
- [x] 允许自定义元方法
- [ ] 简单反射
- [ ] 类型绑定
## 提示 该库加入了基于EmmyLua的类型注释,建议使用EmmyLua插件以获得较好的类型提示 ## 使用方法 ### 创建类 ```lua 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 ``` ### 类方法 ```lua 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 ``` ### 类静态成员 ```lua 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 ``` ### 类继承 ```lua 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 ``` ### 元方法定义 ```lua 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`方法