zoukankan      html  css  js  c++  java
  • lua的self

    lua中self指的是当前方法所属的table。一般来讲self可以理解为当前对象,但是在创建一个“类”的实例的时候,它代表的确是基类,而非当前对象。

    下面上代码:

     1 base = {}
     2 
     3 function base:new(id)
     4     local o = {}
     5     setmetatable(o, self)
     6     self.__index = self
     7     self.gg= id                   ------------此处的self指的是base这个table,而不是你新创建的o。此处对self的操作,会影响其他实例。因为base被改变了
     8     return o
     9 end
    10 
    11 function base:add(v)
    12     self.gg = v                  -------------此处self指的是当前实例,即new方法中的o,而不是base
    13 end
    14 
    15 a1 = base:new(12)
    16 a2 = base:new(4)    -------修改了所有以base为metatable的实例(table)
    17 
    18 print(a1.gg)  -- 这里显示的是4,如果把new方法中的self.gg=id改为 o.gg=id,那么此处显示12
    19 a2:add(13)
    20 print(a1.gg)  -- 由于add方法修改的self是当前实例,而不是base,因此a2的add方法,不会影响a1
    21 print(a2.gg)
  • 相关阅读:
    BZOJ1443 [JSOI2009]游戏Game
    BZOJ4950 [Wf2017]Mission Improbable
    假期编程
    假期编程
    假期编程
    假期编程
    假期编程练习-求和
    假期编程练习——一个数的n次幂取余
    假期编程练习———十进制转二进制
    小球抛物线运动
  • 原文地址:https://www.cnblogs.com/Erainbj/p/3459392.html
Copyright © 2011-2022 走看看