【Lua】Lua之面向对象
来源:互联网 发布:读诗书明德知礼下联 编辑:程序博客网 时间:2024/05/08 14:08
在上一篇中我们提到在 Lua 中的一条总结
万物皆值: 函数也是一种值
正式这个特点我们可以使用 table (数组)构建一个包含有属性和方法的 table,这个table 就可以被我们当做对象来使用
metatable
tbl1 = {a = 1}tbl2 = {}setmetatable(tbl2,{__index = tbl1})print(tbl2.a) --输出1
metastable可以用来改变table的行为,如__index表示查找元素的行为
这里执行 tbl2.a 的时候,由于tbl2没有a这个key对应的value,会到metatable中去查找,metatable中有__index这个key对应的值tbl1,所以最终会到tbl1中去 查找a对应的value,最后得到1。
面向对象
Dog = {name = "dahuang"} -- hello,dahuangfunction Dog:new(dog) -- body dog = dog or {} setmetatable(dog,self) self.__index = self return dogendfunction Dog:eat() -- body print(self.name, "eat something...")endfunction Dog:getName() -- body return self.nameendfunction Dog:setName(name) -- body self.name = nameendd = Dog:new()d:eat() -- 输出: dahuang eat something...print(d:getName()) -- 输出: dahuangd:setName("Hachi") -- 八公print("change name:",d:getName()) -- 输出: Hachi
setmetatable(dog,self)
self.__index = self
这里是为新的对象 dog 设置了 metatable ,改变了__index的行为,即方法体是通过 metatable 来调用的
继承
Husky = Dog:new()-- Derived class method newfunction Husky:new (dog) dog = dog or Dog:new(dog) setmetatable(dog, self) self.__index = self return dogendfunction Husky:eat() -- body print("husky eat meat...")endh = Husky:new()h:eat() --输出:husky eat meat...h:setName("ErHa")print(h:getName()) --输出:ErHa
继承一个基类,来扩展派生类的方法,派生类中保留了基类的成员变量和方法,也可以重写覆盖基类中的成员或者方法
阅读全文
0 0
- 【Lua】Lua之面向对象
- Lua 之 面向对象 -- 继承
- Lua基础之面向对象
- Cocos2d-x Lua游戏开发之Lua 面向对象编程
- Lua学习之6:面向对象编程
- Lua 初识之面向对象 - 十四
- Cocos2d-Lua之面向对象的封装
- Cocos2d-Lua之面向对象的继承
- Lua 面向对象之继承的实现
- Lua 基础之面向对象编程
- Lua学习笔记之面向对象
- LUA 面向对象
- LUA面向对象浅析
- Lua 面向对象实现
- lua 面向对象
- Lua 面向对象
- Lua面向对象
- lua 面向对象编程
- Android系统架构-AndroidStudio文件架构-1
- Android自定义Span示例
- c++实训单元五-自定义数据类型
- Redis主从复制
- 优化Trunk
- 【Lua】Lua之面向对象
- Oracle PL/SQL开发基础(第二十二弹:类型转换函数)
- HDOJ 2191 珍惜现在,感恩生活(多重背包)
- 配置python环境变量
- Idea 调试功能使用指南
- 数据交互vue-resource
- matlab数据类型(数值类型)
- (OK)(OK) Android-x86-7.1.1/ kernel 4.4.62
- Kotlin-31.操作符/运算符重载(operator overload)