Awesome
Class Commons
Class Commons is a project to provide a common compatibility interface for class systems. The goal of this is to make libraries independent of class libraries, a library using the Class Commons API can then be used with any class system adhering to it (albeit via a compatibility layer).
Specification
Features
- Single-class inheritance
- Constructors
- Instance methods
- Polymorphism
Class definition is single-write read-only, so the entire class has to be defined on creation.
Functions
class = common.class(name, table, parents...)
instance = common.instance(class, ...)
Class constructors
Constructors are defined by the special init
function:
foo = {}
function foo:init()
self.bar = "baz"
end
foo = common.class("foo", foo)
Derived classes may access the super class constructors by using <super>.init
, but
ONLY if the parent was created using common.class:
foo = common.class("foo", {init = function(self) self.foo = true end})
bar = common.class("bar", {init = function(self) foo.init(self) end})
NOTE: Accessing <super>.init
from classes not created with common.class yields
undefined behaviour.
Instances
Instances may be created using common.instance
:
foo = common.class("foo", {init = function(self, bar) self.bar = bar end})
baz = common.instance(foo, 'baz')
Example
local Tree = {}
function Tree:grow()
print("Is a big tree now!")
end
function Tree:chop()
print("Chopped down a tree.")
end
local Ent = {}
function Ent:chop()
print("I am no tree, I am an ent!")
end
Tree = common.class("Tree", Tree)
Ent = common.class("Ent", Ent, Tree)
local tree = common.instance(Ent)
tree:grow() --> Is a big tree now!
tree:chop() --> I am no tree, I am an ent!
Participating libraries
Repository information
This repository will both contain documentation (like this very document) and tests. (Note: located in a subrepository.) The authors of participating libraries all get write access, and are free, and encouraged, to collaborate.