码迷,mamicode.com
首页 > 其他好文 > 详细

lua中class的一种实现方式,单例扩充

时间:2018-12-11 20:47:42      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:singleton   lse   支持   习惯   pre   turn   func   大神   new   

 

先上代码

 

 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的一种实现方式,单例扩充

标签:singleton   lse   支持   习惯   pre   turn   func   大神   new   

原文地址:https://www.cnblogs.com/TheMeteor/p/10104982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!