zoukankan      html  css  js  c++  java
  • 对lua继承中self.__index = self的释疑

    首先看看从lua表中查找一个键时的流程:

    -- 当从表t中查找键k时,lua处理如下:
    -- 1.t中是否有k,有则直接返回值,否则第2步
    -- 2.t是否有元表, 无则返回nil, 有则第3步
    -- 3.t的元表是否有__index元方法, 无则返回nil, 有则查找__index指向的表或对应的方法
    
    ---注意两种写法
    -- 写法1, 可以保持继承链
    local class = {}
    
    function class:new()
    	self.__index = self
    	return setmetatable( {}, self )
    end
    
    function class:say()
    	print(111)
    end
    
    local o1 = class:new()
    o1.say()
    
    local o2 = o1:new()
    o2.say()
    
    --- 写法2, 只能继承1次, 第2次派生时没了__index元方法
    local class = {}
    class.__index = class
    
    function class:new()
    	return setmetatable( {}, self )
    end
    
    function class:say()
    	print(111)
    end
    
    local o1 = class:new()
    o1.say()
    
    -- 第2次继承失败了, 因为o1并没有__index元方法
    local o2 = o1:new()
    o2.say()
    

      

  • 相关阅读:
    Codeforces Round #717 (Div. 2)
    Codeforces Round #716 (Div. 2)
    atCoder Regular Contest 117
    Codeforces Round #715 (Div. 2)
    牛客挑战赛49
    从零开始搭建webpack应用
    扫盲:npm
    MYSQL安装
    Int和integer区别
    关于JDK配置以及DOS窗口执行指令
  • 原文地址:https://www.cnblogs.com/tudas/p/how-to-understand-lua-oo-self__index.html
Copyright © 2011-2022 走看看