Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

bartbes/Class-Commons

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

An attempt at unifying lua class libraries to provide a common API.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5

Morty Proxy This is a proxified and sanitized view of the page, visit original site.