--- Prototype-based objects --
object/class = prototype {value, ...; field = value ...}
_init
(assuming the default
-- _clone
)._
".object.field
object:method (...)
Class.method (object, ...)
object.field = x
function object:method (...) ... end
_init
-- @field _clone object constructor which takes initial values for
-- fields in _init
_G.Object = {
_init = {},
_clone = function (self, values)
local object = table.merge (self, table.rearrange (self._init, values))
return setmetatable (object, object)
end,
-- Sugar instance creation
__call = function (...)
-- First (...) gets first element of list
return (...)._clone (...)
end,
}
setmetatable (Object, Object)