Difference between revisions of "clasp"

m (Evölbug moved page User:Evölbug to clasp: library)
Line 1: Line 1:
 +
Minimal Lua class library in 13 lines of code: https://github.com/evolbug/lua-clasp <br />
 +
<source lang="lua">
 +
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)
 +
 +
 +
-- 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)
 +
 +
 +
-- 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)
 +
</source>
 +
 +
{{#set:Name=clasp}}
 +
{{#set:LOVE Version=Any}}
 +
{{#set:Description=Tiny Lua class library}}
 +
{{#set:Keyword=Class}}
 +
[[Category:Libraries]]

Revision as of 16:35, 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)


-- 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)


-- 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)