# classic **Repository Path**: mirrors_rxi/classic ## Basic Information - **Project Name**: classic - **Description**: Tiny class module for Lua - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-11 - **Last Updated**: 2025-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Classic A tiny class module for Lua. Attempts to stay simple and provide decent performance by avoiding unnecessary over-abstraction. ## Usage The [module](classic.lua) should be dropped in to an existing project and required by it: ```lua Object = require "classic" ``` The module returns the object base class which can be extended to create any additional classes. ### Creating a new class ```lua Point = Object:extend() function Point:new(x, y) self.x = x or 0 self.y = y or 0 end ``` ### Creating a new object ```lua local p = Point(10, 20) ``` ### Extending an existing class ```lua Rect = Point:extend() function Rect:new(x, y, width, height) Rect.super.new(self, x, y) self.width = width or 0 self.height = height or 0 end ``` ### Checking an object's type ```lua local p = Point(10, 20) print(p:is(Object)) -- true print(p:is(Point)) -- true print(p:is(Rect)) -- false ``` ### Using mixins ```lua PairPrinter = Object:extend() function PairPrinter:printPairs() for k, v in pairs(self) do print(k, v) end end Point = Object:extend() Point:implement(PairPrinter) function Point:new(x, y) self.x = x or 0 self.y = y or 0 end local p = Point() p:printPairs() ``` ### Using static variables ```lua Point = Object:extend() Point.scale = 2 function Point:new(x, y) self.x = x or 0 self.y = y or 0 end function Point:getScaled() return self.x * Point.scale, self.y * Point.scale end ``` ### Creating a metamethod ```lua function Point:__tostring() return self.x .. ", " .. self.y end ``` ## License This module is free software; you can redistribute it and/or modify it under the terms of the MIT license. See [LICENSE](LICENSE) for details.