Difference between revisions of "clasp"
Line 15: | Line 15: | ||
a = Vector(10, 10) | a = Vector(10, 10) | ||
− | print('Vector:', a.x, a.y, a.isVector) | + | print('Vector:', a.x, a.y, a.isVector) -- "Vector: 10 10 true" |
Line 27: | Line 27: | ||
b = Vector3(1, 2, 3) | b = Vector3(1, 2, 3) | ||
− | print('Vector3:', b.x, b.y, b.z, b.isVector) | + | print('Vector3:', b.x, b.y, b.z, b.isVector) -- "Vector3: 1 2 3 true" |
Line 44: | Line 44: | ||
c = Point(15, 25) | c = Point(15, 25) | ||
− | print(c) | + | print(c) -- "Point(15, 25)" |
</source> | </source> | ||
Revision as of 16:40, 23 April 2017
Minimal Lua class library in 13 lines of code: https://github.com/evolbug/lua-clasp
class = require "clasp"
-- Basic class
Vector = class {
isVector = true; -- static values
init = function(self, x, y) -- initializer function
self.x = x
self.y = y
end;
}
a = Vector(10, 10)
print('Vector:', a.x, a.y, a.isVector) -- "Vector: 10 10 true"
-- Inheritance
Vector3 = Vector:extend {
init = function(self, x, y, z) -- function overriding
Vector.init(self, x, y) -- superclass method call
self.z = z
end;
}
b = Vector3(1, 2, 3)
print('Vector3:', b.x, b.y, b.z, b.isVector) -- "Vector3: 1 2 3 true"
-- Metamethods
Point = class {
init = function(self, x, y)
self.x = x
self.y = y
end;
__meta = { -- metamethod table
__tostring = function(self)
return 'Point('..tostring(self.x)..', '..tostring(self.y)..')'
end;
};
}
c = Point(15, 25)
print(c) -- "Point(15, 25)"