如何在Lua中的另一个表的表成员中搜索

时间:2019-05-13 12:01:58

标签: search lua

我正在编写一个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

1 个答案:

答案 0 :(得分:3)

我认为您误解了在obj函数中应该放在self中的内容以及应该在:new中放置的内容。您自己输入的内容最终会在通过: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