lua面向对象之类的实现

function class(name, super)
	local cls	= nil
	local stype = type(super)

	if stype ~= "function" and stype ~= "table" then
		stype = nil
		super = nil
	end

	if super then
		cls = i3k_clone(super)
		cls.__super = super
	else
		cls = { ctor = function() end }
	end

	cls.__cname = name
	cls.__index = cls

	function cls.get_name()
		return cls.__cname
	end

	function cls.get_super()
		return cls.__super
	end
	function cls.new(...)
		local inst = setmetatable({ }, cls)
		inst.__class = cls

		local bases = { }
		local __super = cls.__super
		while __super ~= nil do
			table.insert(bases, __super)

			__super = __super.__super
		end

		for k = #bases, 1, -1 do
			local __super = bases[k]
			if __super.ctor then
				__super.ctor(inst, ...)
			end
		end

		inst:ctor(...)

		return inst
	end

	return cls
end

 eg:

local cls_animals = class("animals") 

local cls_dog = class("dog", cls_animals)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值