云风的个人空间 : Lua 中实现面向对象[LuaOO]

首页 :: 索引 :: 修订历史 :: 你好, 52.54.111.228
你的足迹: » Lua 中实现面向对象
这是一个旧版本的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