Skip to content
master
Go to file
Code

Files

Permalink
Failed to load latest commit information.

README.md

Classic

A tiny class module for Lua. Attempts to stay simple and provide decent performance by avoiding unnecessary over-abstraction.

Usage

The module should be dropped in to an existing project and required by it:

Object = require "classic"

The module returns the object base class which can be extended to create any additional classes.

Creating a new class

Point = Object:extend()

function Point:new(x, y)
  self.x = x or 0
  self.y = y or 0
end

Creating a new object

local p = Point(10, 20)

Extending an existing class

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

local p = Point(10, 20)
print(p:is(Object)) -- true
print(p:is(Point)) -- true
print(p:is(Rect)) -- false 

Using mixins

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

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

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 for details.

About

Tiny class module for Lua

Resources

License

Releases

No releases published

Packages

No packages published

Languages

You can’t perform that action at this time.