Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rxi/classic
Tiny class module for Lua
https://github.com/rxi/classic
Last synced: 3 days ago
JSON representation
Tiny class module for Lua
- Host: GitHub
- URL: https://github.com/rxi/classic
- Owner: rxi
- License: mit
- Created: 2014-02-26T18:38:01.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2021-12-31T14:37:20.000Z (almost 3 years ago)
- Last Synced: 2024-05-21T13:01:32.303Z (6 months ago)
- Language: Lua
- Homepage:
- Size: 152 KB
- Stars: 806
- Watchers: 24
- Forks: 92
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-love2d - classic - Tiny class module for Lua. Attempts to stay simple and provide decent performance by avoiding unnecessary over-abstraction. (OO)
- awesome-playdate - rxi/classic - A tiny class module for Lua. Attempts to stay simple and provide decent performance by avoiding unnecessary over-abstraction. (Game Development / Programming Frameworks & Languages)
- awesome-defold - Classic
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
endPoint = Object:extend()
Point:implement(PairPrinter)function Point:new(x, y)
self.x = x or 0
self.y = y or 0
endlocal p = Point()
p:printPairs()
```### Using static variables
```lua
Point = Object:extend()
Point.scale = 2function Point:new(x, y)
self.x = x or 0
self.y = y or 0
endfunction 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.