lua中self.__index = self是什么意思?
2017-03-16 20:23
459 查看
example1
Account = {balance = 0} function Account:new(conf) conf = conf or {} setmetatable(conf,self) self.__index = self return conf end
Account模拟一个对象,
new方法类似于实例化一个对象,
conf可存放一些初始值作用等同于
conf是
Account的子类。
解释:
Account这个table有一个属性
balance,通过
new函数实例化一个类继承于
Account。在lua中类,父类都是通过table数据结构加上元表元方法来实现。
__index是lua一个元方法,被广泛的使用在模拟实现继承方法。访问一个table中不存在的key,lua将会返回一个nil。
但一个表存在元表的时可能会发生改变。既访问不存在的key时,如果这个table存在元表,就会尝试在它的元表中寻找是否存在匹配key对应的value。
:是lua面向对象的语法糖。
Account:new(conf)等同于
Account.new(self, conf),相当于将调用者自身当做第一个参数,使用冒号调用就相当于隐式地传递
self参数。
元方法的定义可以写在new函数外面。如下:
Account = {balance = 222} Account.__index = Account function Account:new(conf) conf = conf or {} setmetatable(conf, self) return conf end
或者类似于lua_resty_mysql中写法:
Account = {balance = 222} local mt = {__index = Account} function Account:new(conf) conf = conf or {} setmetatable(conf, mt) return conf end
调用:
local aa = Account:new() ngx.say(aa.balance) --222
example2
local a = {} local b = {k = 11} setmetatable(a,b) --设置元表,仅仅设置元表并不能使lua寻找父类的方法或属性 b.__index = b --设置元方法 b.v = 22 --给b表增加一个属性 a.aa = 33 --给a表增加一个属性 print(a.k) --11, 返回父类b中k的值。 print(a.v) --22,父类增加的属性和方法都可以被子类继承 print(b.aa) --nil,相反,父类并不可以获取子类的值
相关文章推荐
- java中的lastIndexOf( )函数是什么意思
- if (donutString.indexOf("dozen") != -1)是什么意思
- Objective-C语言的 if ( self = [super init] )什么意思?
- 【lua metatable、__index __newindex是什么】
- IOS Q&A __weak typeof(self) weakSelf = self 是什么意思?
- z-index什么意思
- var ifBoy= $("input[id='IF_BOY']:checked", $("div[index-popus]")).val();什么意思?
- <base target="_self">是什么意思
- cc(self)是什么意思?
- 对lua继承中self.__index = self的释疑
- php new self()是什么意思
- python3--基础-*self._args, **kwargs 是什么意思
- self.func(*self.args) 什么意思
- Lua(setmetatable,__index,self,元表)+(cocos2d + lua信息展示框的实现和显示)
- 【OC学习-10】写一个复数相加的例子来谈谈OC的self是什么意思?
- CSS中z-index属性具体是什么意思?
- z-index:9999在CSS中是什么意思
- python的class(类)中的self是什么意思
- super(LastUpdateOrderDict, self).__init__()是什么意思?
- {style}/index_article.htm {style}表示什么意思啊