--- Prototype-based objects --
_init
field is a list:
-- object/Class = prototype {value, ...; field = value, ...}
_init
._init
field is a function:
-- object/Class = prototype (value, ...)
_init
function._
".object.field
object:method (...)
Class.method (object, ...)
object.field = x
function object:method (...) ... end
_init
-- documented above
_G.Object = {
_init = {},
_clone = function (self, ...)
local object = table.clone (self)
if type (self._init) == "table" then
table.merge (object, table.clone_rename (self._init, ...))
else
object = self._init (object, ...)
end
return setmetatable (object, object)
end,
-- Sugar instance creation
__call = function (...)
-- First (...) gets first element of list
return (...)._clone (...)
end,
}
setmetatable (Object, Object)