Lua面向对象之一:简单例子


1.Lua面向对象实现步骤

①创建一个全局表(称之为元表)

②设置这个元表的__index值(值通常为元表自己,这样就能通过__index查找到对应的属性和方法)

__index 赋值其实是一个function的语法糖,Sharp.__index = Sharp等价于Sharp.__index = function(key) return Sharp[key] end 

 

③新建一个表,使用setmetatable方法将元表设置到这个新表中,那这个新表就能以对象的方式来调用对应的属性和方法了

当这个对象调用属性或者函数时,首先查找自身的元表,如果找到则返回;如果没找到,则检查元表中是否有__index,如果有,则使用__index的值继续查找,直到没有__index为止。

其实这个过程和C++中的代码流程是完全一致的(多了将对应方法设置到元表中的过程)具体可参看《Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

 

2.例子

①代码 

Sharp = { _val = 1}  --① 父类

function Sharp:new() local new_sharp = { } self.__index = self  --②,self == Sharp
    setmetatable(new_sharp, self)  --

    return new_sharp end

function Sharp:sharp_func() print("Sharp call sharp_func") end

function Sharp:name() print("Sharp call name") end

function Sharp:val() print(string.format("Sharp call val %d", self._val)) end

 

②调用代码

local sharp = Sharp:new() sharp:sharp_func() sharp:name() sharp:val()

 

③输出结果

 

Lua面向对象:

Lua面向对象之一:简单例子

Lua面向对象之二:类继承

Lua面向对象之三:其它一些尝试


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM