lua中class的一种实现方式,单例扩充
Posted themeteor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua中class的一种实现方式,单例扩充相关的知识,希望对你有一定的参考价值。
先上代码
1 local _class={} 2 3 function class(super,singleton) 4 local class_type={} 5 class_type.ctor=false 6 class_type.super=super 7 class_type.new=function(...) 8 local obj={} 9 do 10 local create 11 create = function(c,...) 12 if c.super then 13 create(c.super,...) 14 end 15 if c.ctor then 16 c.ctor(obj,...) 17 end 18 end 19 20 create(class_type,...) 21 end 22 setmetatable(obj,{ __index=_class[class_type] }) 23 return obj 24 end 25 if singleton then 26 class_type.instance = singleton 27 class_type.Instance = function() 28 if class_type.instance==true then 29 class_type.instance = class_type.new() 30 end 31 return class_type.instance 32 end 33 end 34 local vtbl={} 35 _class[class_type]=vtbl 36 37 setmetatable(class_type,{__newindex= 38 function(t,k,v) 39 vtbl[k]=v 40 end 41 }) 42 43 if super then 44 setmetatable(vtbl,{__index= 45 function(t,k) 46 local ret=_class[super][k] 47 vtbl[k]=ret 48 return ret 49 end 50 }) 51 end 52 53 return class_type 54 end
想在lua项目中添加单例, class的核心部分是借鉴的云风大神的代码,由于实用了newindex元方法对类的赋值进行拦截并将vtbl方法集保存到_class中。所以没法像之前习惯的方式添加class.Instance对类添加方法。所以在class中通过提前定义Instance的方式添加了单例的支持(类似于提前定义的ctor)
添加的过程中仔细看了下这个class这段代码感觉写的真是漂亮。先挖个坑,酝酿回味一下再继续说说我对这个class的理解
以上是关于lua中class的一种实现方式,单例扩充的主要内容,如果未能解决你的问题,请参考以下文章