关于self.__index = self的理解

Lua 查找一个表元素时的规则,其实就是如下 3 个步骤:

  • 1.在表中查找,如果找到,返回该元素,找不到则继续
  • 2.判断该表是否有元表,如果没有元表,返回 nil,有元表则继续。
  • 3.判断元表有没有 __index 方法,如果 __index 方法为 nil,则返回 nil;如果 __index 方法是一个表,则重复 1、2、3;如果 __index 方法是一个函数,则返回该函数的返回值。

该部分内容来自作者寰子:https://blog.csdn.net/xocoder/article/details/9028347


local BaseCls = {}
BaseCls.sayHello = function() print('Hello') end

local DriverCls = {}
local DrvierCls2 = setmetatable( DriverCls, {__index = BaseCls} )
function DriverCls:new()
   self.__index = self
   return setmetatable( {}, self )
end

function DriverCls:new2()
   return setmetatable( {}, {__index = self} )
end

local driverClsNew1 = DriverCls:new()
local driverClsNew2 = DriverCls:new2()

driverClsNew1.sayHello()
driverClsNew2.sayHello()
print(DriverCls == DrvierCls2)


--Hello
--Hello
--true

self.__index = self做这个操作是因为self作为元表返回了,也就是查找的时候会进入上面3的步骤

猜你喜欢

转载自blog.csdn.net/skillart/article/details/98346459
今日推荐