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()
    

      

  • 相关阅读:
    OpenGL完整实例
    OpenGL
    Socket(2)
    Socket(1)
    Stream,Reader/Writer,Buffered的区别(2)
    Stream,Reader/Writer,Buffered的区别(1)
    SQLite数据库与Contentprovider(2)
    SQLite数据库与Contentprovider(1)
    数据存储和访问
    AIDL与service
  • 原文地址:https://www.cnblogs.com/tudas/p/how-to-understand-lua-oo-self__index.html
Copyright © 2011-2022 走看看