我正在编写一个 lua 程序,它有一个表,该表是另一个表的成员。当我向该成员表添加新日期时,一切正常。但是,当我想在该表中搜索时,无论我给出什么键,我总是会将最后一行添加到表中。如何在该成员表中正确搜索?
Stream = {name = ""}
function Stream:new(obj, name)
obj = obj or {}
setmetatable(obj, self)
self.__index = self
self.name = name or "default"
--[[ declaration and initialization of another table memebers--]]
return obj
end
Table = {streams = {}}
function Table:new(obj)
obj = obj or {}
setmetatable(obj, self)
self.__index = self
self.streams = {}
--[[ declaration and initialization of another table memebers--]]
return obj
end
table_ = Table:new(nil)
table_.streams["stdout"] = Stream:new(nil,"stdout")
table_.streams["stderr"] = Stream:new(nil,"stderr")
print("Stdout stream name:", table_.streams["stdout"].name)
print("Stream table content:")
for k, v in pairs(table_.streams) do
print(k, v)
end
我期望输出是:Stdout stream name: stdout
但我得到:Stdout stream name: stderr
我认为你误解了你应该输入的内容obj
以及你应该放入什么self
在你的:new
功能。你放入 self 的内容最终会在你通过你创建的所有对象之间共享:new
功能。您可能想查找有关元表的更多信息。这是一个小例子来演示
local t = {}
function t:new(name)
local obj = {
Name = name
}
setmetatable(obj, self)
self.__index = self
self.SharedName = name
return obj
end
local o1 = t:new("a")
print(o1.Name) -- a
print(o1.SharedName) -- a
local o2 = t:new("b")
print(o1.Name) -- a
print(o1.SharedName) -- b
-- after creating second object SharedName field was overwritten like in your case
print(o2.Name) -- b
print(o2.SharedName) -- b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)