Lua面向对象
来源:互联网 发布:java多线程 单例 编辑:程序博客网 时间:2024/05/31 05:28
lua没有class的概念,但是可以直接继承其他对象
单继承:
base = { a = 1 , funca = function() return " base " end} function base:new(o) local o = o or {} setmetatable(o, self) self.__index = self return o end child_1 = base:new() child_1.funcb = function() return "child1" end child_2 = child_1:new() print(child_2.a .. child_2.funca() .. child_2.funcb()) -->1 base child1
多重继承:
local function search(k, plist) for i = 1, #plist do local v = plist[i][k] if v then return v end end end function createClass(...) local c = {} local parents = {...} --设置元方法 setmetatable(c, {__index = function(t,k) return search(k, parents) end}) --设置元方法 c.__index = c function c:new(o) o = o or {} setmetatable(o, c) return o end return c end Named = {} function Named:getname() return self.name end Account = { name = "Tom" } NamedAccount = createClass(Named, Account) account = NamedAccount:new() print(account:getname())
以上代码中的createClass可以生成一个新table,里面包含了两个基类中的成员,在最后的新对象NamedAccount中,调用account:getname时,程序会先在account中找,然后在 Named和Account中寻找同名的方法,这样会略微影响效率,也可以用空间换时间的方法修改上面的–设置元方法中的代码:
setmetatable(c, {__index = function(t,k) local v = search(k, parents) t[k] = v return v end})
简单的继承方法:
0 0
- 【Lua】Lua之面向对象
- LUA 面向对象
- LUA面向对象浅析
- Lua 面向对象实现
- lua 面向对象
- Lua 面向对象
- Lua面向对象
- lua 面向对象编程
- lua面向对象
- lua实现面向对象
- lua面向对象思想
- lua 面向对象使用
- Lua的面向对象
- lua实现面向对象
- Lua面向对象
- lua中的面向对象
- lua的面向对象
- lua实现面向对象
- MVC模式和URL访问
- #pragma GCC system_header有什么用
- 详解css3系列:动画@keyframes和Animation
- 输出和模型使用
- 利用 LeakCanary 来检查 Android 内存泄漏
- Lua面向对象
- Java,String和Date的转换
- ScrollView Xib布局
- CURD特性
- ios开发navigationController pushViewController 方式多次跳转 怎么返回到最上层,怎么返回到指定的某一层
- 普通查询方式
- Codeforces Round #346 (Div. 2) B - Qualifying Contest 优先队列
- 第十周项目一 阅读程序,写出程序运行的结果(3)
- 常用连贯操作