# eclass **Repository Path**: chuyansz/eclass ## Basic Information - **Project Name**: eclass - **Description**: eclass is a simple object-oriented implementation of Lua - **Primary Language**: Lua - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-01-31 - **Last Updated**: 2024-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # eclass eclass is a simple object-oriented implementation of Lua # Example base class ```lua require("eclass") -- declare class function local Cbase = class("base") -- declare a class function Cbase:_init_(name) -- constructor self.name = name -- class member value. end function Cbase:hello() -- class function return self.name end function Cbase:_del_() -- destructor print("base del ... " .. self.name) end return Cbase ``` class one ```lua require("eclass") local Cbase = require("base") Cone = class("one", Cbase) -- inherit function Cone:_init_(name) Cbase._init_(self, name) -- supper call end function Cone:say() print("one start") print("one say " .. self.name) print("one end\n") end return Cone ``` class two ``` require("eclass") local Cone = require("one") CTwo = class("two", Cone) function CTwo:_init_(name) Cone._init_(self, name) end function CTwo:say() print("two start") print("two say " .. self.name) print("call supper method.") Cone.say(self) print("two end\n") end return CTwo ``` class three ```lua require("eclass") local Cone = require("one") CThree = class("three", Cone) function CThree:_init_(name) Cone._init_(self, name) self._child = Cone.new("child") -- Recursive declaration. end function CThree:say() print("three start.") print("three say " .. self.name) print("child say.") self._child:say() print("three end.") end return CThree ``` test fucntion ```lua package.path = package.path .. ";../src/?.lua;" require("eclass") local Cone = require("one") local Ctwo = require("two") local CThree = require("three") local one = Cone.new("one") local two = Ctwo.new("two") local three = CThree.new("three") print(one:hello()) assert(one:hello() == "one") assert(two:hello() == "two") assert(three:hello() == "three") one:say() two:say() three:say() one = nil two:say() ```