--从【0】 处开始function sertchField( parents ,k) for i,v in pairs(parents) do local result =v[k]--遍历parents={...} 里的每个元素,查找一个键为k的成员(例如 fly ,onfoot) --【3】这里找到了 fly onfoot 就返回 找不到 就 返回 nil 了 if result then return result end end end function extends(...) local cls={}--继承了 parents={...} 里的类的新类 local parents={...} --【2】在新类里面找不到的成员 将按照sertchField 的规则去找【3】 setmetatable(cls,{__index=function(t,k) return sertchField(parents,k) end }) --【1】这里设定cls 的__index ,当o 实例找不到成员 会进入__index 设定的表查找 当cls 也查不到【2】就会按照sertchField查找 cls.__index=cls function cls:new(o)--为新类构造 构建函数 o=o or {} --【0】设定元表 ,在o 实例找不到的 成员 将会到cls 新类里面去找 但是 cls 的__index还没有设定, --因此在上面别忘了设定cls的__index 在【1】处 setmetatable(o,cls) return o end return cls end --会飞的行为 FlyAction={} function FlyAction:fly()print("flying ") end --会走的行为 onFootAction ={} function onFootAction:onfoot()print("on foot ") end--构建 一个新类 TwoAction = extends( FlyAction ,onFootAction) --实例化一个新类 进入【0】 anim=TwoAction:new({name="bird"}) --print(anim.kk) anim:fly() anim:onfoot()
Lua 多重继承
最新推荐文章于 2022-07-03 22:13:42 发布