class - 在 Lua 类中使用表变量
问题描述
我需要一个 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 = {}
推荐阅读
- vue.js - 使用 vuetify 规则进行验证的时间
- r - 如何使用 conda 安装 R 模拟包?
- javascript - 如何将每个firebase数据库条目传递给react-循环中的本机组件
- python - .write() 和 .writelines() 返回一个空白的 .txt 文件——PYTHON
- javascript - Javascript通过数据属性获取元素子节点
- c# - 在运行 Unity 应用程序时打开 PDF
- powershell - 删除后缀为 _Inactive 的本地用户配置文件
- visual-studio - WebDemo 项目已经不在 Flinks.sln 解决方案中了,如何调试呢?
- azure-devops - 与自动化测试相关的测试用例(.NET Core、Jasmine、Jest、Xamarin)
- r - 用于多维数组的 data.frame 的替代方案