这几天想着动手打造一个lua
通用扩展库来。脑袋不用多想,筋骨也懒得动弹。设想中,第一步必须是实现面向对象OOP
,其次用OOP
把基础的数据结构搭起来,最后再把剩下的字符串、数字、日期、正则的接口展开起来,也就八九不离十了。
首先是OOP
这关。借用Cocos2d-x Lua
的class
方法加以构造是一个现成的、不错的选择〔一直用着,没出什么幺蛾子,最新版本还支持多继承,不过也就看个新鲜,实际上在现有的游戏项目开发中,基本不会用到,也可能是还没有这种强迫的需求〕,实际上我也这么干了。于是乎,点缀了几个预想中的接口来,用着也顺手,但总有那么股怪味儿。
要说什么怪味儿?其实一直都很清楚,只是之前一直没有正视或思考过——Cocos2d-x
的那套OOP
实际上是个半成品!在它的实现中,所有的成员都直接或间接地挂在类上,这意味着,只要你访问得到的就没有你不能改的,不管你愿不愿意,一个nil
赋值甚至可以毁了一个类。可怕的副作用!
而我们知道lua
本身只有一种数据结构,也就是table
。说它管用,上天入地,无所不及;说它难用,烂七八糟,流氓痞子。可以当Array
,可以玩HashMap
,可以多重嵌套,层层叠叠,不是json
,胜似json
。综上所述——自成一说,没个正经!
以上论述属个人观点,下次分享怎么实现类成员的私有化。