这是一个旧版本的
LuaOO于2006-06-12 23:51:30.
这里提供
Lua 中实现 OO 的一种方案:
local _class={}
function class(super)
local class_type={}
class_type.ctor=false
class_type.super=super
class_type.new=function(...)
local obj={}
do
local create
create = function(c,...)
if c.super then
create(c.super,...)
end
if c.ctor then
c.ctor(obj,...)
end
end
create(class_type,...)
end
setmetatable(obj,{ __index=_class[_class[class_type]] })
return obj
end
local vtbl={}
_class[class_type]=vtbl
_class[vtbl]=function (t,k)
return function(self,...)
vtbl[k](t,...)
end
end
setmetatable(class_type,{__newindex=
function(t,k,v)
vtbl[k]=v
end
})
if super then
setmetatable(vtbl,{__index=
function(t,k)
local ret=_class[super][k]
vtbl[k]=ret
return ret
end
})
end
return class_type
end