Trying to understand this lua snippet -
i trying understand function does. can explain me?
function newinstance (class) local o = {} setmetatable (o, class) class.__index = class return o end it called this:
self = newinstance (self)
this function apparently serves provide variant of oop in lua (a bit sloppy in opinion).
this factory class.
it may rewritten follows, clarity:
c = { } c.foo = function(self) -- method, class not empty print("foo method called", tostring(self)) end c.__index = c -- (a) function newinstance(class) return setmetatable({ }, class) -- (b) end now if create 2 new instances of c, see both have method foo(), different self:
o1 = newinstance(c) o1:foo() --> foo method called table: 0x7fb3ea408ce0 o2 = newinstance(c) o2:foo() --> foo method called table: 0x7fb3ea4072f0 the foo methods same:
print(o1.foo, o2.foo, o1.foo == o2.foo , "equal" or "different") --> function: 0x7fb3ea410760 function: 0x7fb3ea410760 equal this because table c (the "class") __index ((a) above) of metatable of o1 , o2, set in (b). o1 , o2 2 different tables, created @ (b) (the "class instances" or "objects").
note: set c.__index equal c @ (a) reuse 1 table. following has same effect:
prototype = { } prototype.foo = function(self) -- method, class not empty print("foo method called", tostring(self)) end c = { __index = prototype } function newinstance(class) return setmetatable({ }, class) end o = newinstance(c)
Comments
Post a Comment