lua 面向对象
来源:互联网 发布:nodejs mysql 事务 编辑:程序博客网 时间:2024/06/14 05:17
Lua中的table就是一种对象,这句话可以从3个方面来证实。首先,table与对象一样可以拥有状态。其次,table也与对象一样拥有一个独立于其值的标示(self),最后,table
与对象一样具有独立于创建者和创建地的生命周期
对象有其自己的操作。同样 table 也有这些操作
Account = {balance = 0}
function Account.withdraw(v)
Account.balance = Account.balance -v
end
调用如下: Account.withdraw(100)
在函数中使用全局名称Account是不规范的,改进一下
function Account.withdraw(self,v)
self.balance = self.balance -v
end
调用:
a1 = Account; Account = nil
a1.withdraw(a1,100) --OK
还可以使用语法糖“:”
function Account:withdraw(v)
self.balance = self.balance -v
end
调用时可以写为
a:withdraw(100.00)
当然也可以a.withdraw(a,100.00)
也就是说用冒号就不用传self,用点需要传self
1.类
Lua中的类是用原型概念实现的,即,如果有两个对象a和b,要让b作为a的一个原型,只需要输入如下语句:
setmetatable(a,{__index = b})
在此之后,a就会在b中查找所有它没有的操作。若将b称为是对象a的类,只不过是术语上的变化
以银行账号的示例,就是使用__index元方法。可以应用一项小优化,则无需创建一个额外的table作为账户对象的元表。而是使用Account table自身作为元表:
function Account:new(o)
o = o or{}
setmetatable(o,self)
return o
end
此时调用:
a = Account:new{balance =0}
a:deposit(100.00)
当创建新账户时,a会将Account(Account::new 调用中的self)作为其元表.而当调用a:deposit(100.00)时,
就是调用了a.deposit(a,100).当Lua无法在table a 中找到条目deposit时,就会从__index里找
最终的调用情况为:
getmetatable(a).__index.deposit(a,100)
a的元表是Account,Account.--Index
- 【Lua】Lua之面向对象
- LUA 面向对象
- LUA面向对象浅析
- Lua 面向对象实现
- lua 面向对象
- Lua 面向对象
- Lua面向对象
- lua 面向对象编程
- lua面向对象
- lua实现面向对象
- lua面向对象思想
- lua 面向对象使用
- Lua的面向对象
- lua实现面向对象
- Lua面向对象
- lua中的面向对象
- lua的面向对象
- lua实现面向对象
- Android进阶之Listview/GridView的onItemClick()获取不到焦点
- arduino开发板在MAC OS X El Capitan中找不到串口的问题解决(CH340 CH341 serial )
- Hibernate中悲观锁乐观锁的应用
- muduo库阅读(23)——Net部分:应用层缓冲区类
- css 实现单行或者多行超出后显示...
- lua 面向对象
- /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.17' not found 解决办法
- 第一章:Dubbo整合maven+spring+springmvc+mybatis之环境准备
- 阿牛的EOF牛肉串
- linux内核编译步骤
- jvm实例,tomcat容器,spring容器,在内存中的关系
- IBInspectable / IBDesignable
- 关于有序二维矩阵查找和字符串替换的两道算法题
- 神、上帝以及老天爷