summaryrefslogtreecommitdiff
path: root/readme.md
diff options
context:
space:
mode:
Diffstat (limited to 'readme.md')
-rw-r--r--readme.md39
1 files changed, 39 insertions, 0 deletions
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..77f7461
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,39 @@
+# Object.lua
+## Description
+**Object.lua** is a really small lua module used for class creation that supports single-parent inheritance (Java-like) and metamethods. Initially it was created with three different approaches for fun but it eventually matured enough to be used. It was tested and works just fine on Lua 5.1 and up.
+## Example
+*This is content of `example.lua`.*
+```lua
+local Object = require "Object"
+
+local Point = Object:extends() -- creating new class by extending basic class
+function Point:new (x, y) -- defining function called by constructor for newly created class
+ self.x = x -- instance created by constructor is `self`
+ self.y = y
+end -- no returns needed
+
+Point.NUMBER = 10 -- setting some global values for class
+
+function Point:__tostring () -- metamethod used with `tostring()`
+ return "Point<" .. self.x .. ", " .. self.y .. ">"
+end
+
+local a = Point(3, 2) -- create new instance by calling class
+print(tostring(a))
+
+assert(a:is(Point)) -- you can also check if object is instance of class
+assert(a:is(Object)) -- use `is()` method for it
+
+local Foo = Point:extends() -- you can extend whatever class you want
+function Foo:new (str, x, y)
+ self.__super.new(self, x, y) -- call super constructor first
+ self.str = str -- do whatever else is left to be done
+end
+
+function Foo:__tostring () -- metamethods are not inherited
+ return "Foo(" .. self.str .. ")<" .. self.x .. ", " .. self.y .. ">"
+end
+
+local b = Foo("lorem", 7, -1)
+print(tostring(b))
+```