Cocos2d-x教程 Lua脚本(3) Lua中如何创建"类"与"对象"

      欢迎加入Cocos2d-x 交流群:193411763

       源码下载地址: http://download.csdn.net/detail/u012945598/6692125      .lua文件在Resouces文件夹下,名为test.lua

       Lua是一门面向过程的语言,并没有面向对象语言中的"类"的概念,但是我们可以通过Lua中的”Metatable(元表)“来模拟一个”类“,关键在于__index这个域,他提供了表的索引入口。

      元表也是一个表,Lua语言中定义了很多重定义 table类型操作的入口,他们都是以双下划线”__“开头的,例如__index,__add,当你为一个值设定了Metatable,并且重写了其操作入口,在这个值执行这个操作的时候就会触发重写的自定义操作。具体的说, Lua每种类型的值都有都有他的默认操作方式数字可以做加减乘除等操作字符串可以做连接操作函数可以做调用操作表可以做表项的取值赋值操作他们都遵循这些操作的默认逻辑执行而这些操作可以通过Metatable来改变.

Metatable中定义的操作add, sub, mul, div, mod, pow, unm, concat, len, eq, lt, le, tostring, gc, index, newindex, call...

__index是什么?举个例子来说,当我们访问一个表中的元素不存在时,则会触发去寻找__index元方法。例如我们要索引一个值如table[key],Lua会首先在table本身中查找key的值,如果没有并且这个table存在一个带有__index属性的metatable,则Lua会按照_index所定义的函数逻辑查找。
下面我们来做一个Demo,创建一个基于Lua的工程,新建一个.lua文本,在文本中写入如下代码:


在上述代码中,我们相当于是定义了一个”类“table,为table定义了一个构造体(注意构造体中的self已经被初始化。正常情况下,谁调用new,self就代表谁),当我们创建对象的时候便可以通过table:new(x,y)方法创建,现在table中共有四个属性,我们再为table类添加两个方法:


下面我们创建两个对象:

Cocos2d-x教程 Lua脚本(3) Lua中如何创建"类"与"对象"_第1张图片

我们利用table的构造方法创建了两个变量,通过对象来测试是否能够访问到table中的属性和方法,打印结果如下:


两个对象之间互不影响,都成功访问了类中的属性和方法。

还有一点需要注意的就是,在Lua中的约定调用方法的的时候使用”: “,访问属性的时候使用". "

self表示一项操作所作用的“接受者”

定义一个函数:

function table:test() 等价于   function Class.test(self)
创建一个对象:

object=table:new(10,20) 等价于 object=table.new(self,10,20)

调用一个函数:

object:test()   等价于   object.test(object)


下图为Xcode中 .lua文件的的完整截图:

Cocos2d-x教程 Lua脚本(3) Lua中如何创建"类"与"对象"_第2张图片


你可能感兴趣的:(lua,lua,lua,cocos2d-x,创建类,模拟面向对象,马宗扬,元表Metatable)