Here is the difference between classic and middleclass:
local MiddleClass = require "middleclass"
local M = MiddleClass("M")
function M:initialize()
self.pos = {2, 4}
self.size = {6, 8}
end
function M:__index(key)
if key == "x" then return self.pos[1]
elseif key == "y" then return self.pos[2]
elseif key == "w" then return self.size[1]
elseif key == "h" then return self.size[2]
else rawget(self, key)
end
end
function M:__newindex(key, value)
if key == "x" then self.pos[1] = value
elseif key == "y" then self.pos[2] = value
elseif key == "w" then self.size[1] = value
elseif key == "h" then self.size[2] = value
else rawset(self, key, value)
end
end
local m = M()
assert(m.x == 2)
m.x = 222
assert(m.pos[1] == 222)
print("No errors in MiddleClass.")
local Classic = require "classic"
local C = Classic:extend()
function C:new()
self.pos = {2, 4}
self.size = {6, 8}
end
function C:__index(key)
if key == "x" then return self.pos[1]
elseif key == "y" then return self.pos[2]
elseif key == "w" then return self.size[1]
elseif key == "h" then return self.size[2]
else rawget(self, key)
end
end
function C:__newindex(key, value)
if key == "x" then self.pos[1] = value
elseif key == "y" then self.pos[2] = value
elseif key == "w" then self.size[1] = value
elseif key == "h" then self.size[2] = value
else rawset(self, key, value)
end
end
local c = C()
assert(c.x == 2)
c.x = 222
assert(c.pos[1] == 222)
print("No errors in Classic.")
No errors in MiddleClass.
luajit: ../lib/classic.lua:58: attempt to call method 'new' (a nil value)
Here is the difference between classic and middleclass: