class - 在Lua类中使用表变量

标签 class oop lua lua-table

我需要 Lua 类中的一个表变量,该变量对于该类的每个实例都是唯一的。 在下面列出的示例中,变量 self.element 似乎是一个静态变量,由所有类实例使用。

如何更改 testClass 才能获取非静态 self.element 表变量?

示例:

  local testClass ={dataSize=0, elementSize=0, element = {} }

  function testClass:new (data)
   local o = {}
   setmetatable(o, self)
   self.__index = self

   -- table to store the parts of the element
   self.element = {}
   -- data
   self.element[1] = data
   -- elementDataSize
   self.elementSize = #data
 
   return o
  end

  function testClass:getSize()
    return self.elementSize
  end


  function testClass:addElement(data)
    -- add data to element
    self.element[#self.element+1] = data
    self.elementSize = self.elementSize + #data
  end
  
 function testClass:printElement(element)
    -- print elements data
    element = element or self.element
    local content = ""
    for i=1, #element do
        content = content .." " .. tostring(element[i])
    end
    print("Elements: " .. content)
end

function printAll(element)
  print("Size: " .. tostring(element:getSize()))
  element:printElement()
 end
  
  test = testClass:new("E1")
  printAll(test)
  test:addElement("a")
  printAll(test)
  
  test2 = testClass:new("E2")
  printAll(test2)
  test2:addElement("cde")
  printAll(test2)
  print("............")
  printAll(test)

此实现返回:

$lua main.lua
Size: 2
Elements:  E1
Size: 3
Elements:  E1 a
Size: 2
Elements:  E2
Size: 5
Elements:  E2 cde
............
Size: 3
Elements:  E2 cde

对于我需要的最后一个输出

Size: 3

Elements:  E1 a

最佳答案

testClass:new()中,self指的是testClass

local test = testClass:new()

test.element 将引用 testClass.element

您的实例是 o,因此当您希望每个实例都有自己的 element 时,请将 self.element = {} 替换为 o.element = {}

关于class - 在Lua类中使用表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65561981/

相关文章:

for-loop - 在循环执行时递减循环计数器

rest - 云到设备 Azure IoT REST API

c++ - 仅 header 库中的 "Does not name a type"

java - 制作公共(public)变量的最佳方式(JAVA)

lua - Lua中的第三方库通常是如何处理的

java - 新的 Obj,总是还是有时?

php - 动态/编程创建类属性

java - 从 Java 中的 Enum 中检索值

c++ - 如何为包含另一个类的类编写构造函数?

c# - 通用函数和新约束