在lua中访问表的正确方法是啥?

Posted

技术标签:

【中文标题】在lua中访问表的正确方法是啥?【英文标题】:What's the correct way to access tables in lua?在lua中访问表的正确方法是什么? 【发布时间】:2018-03-02 20:39:08 【问题描述】:

我决定利用空闲时间做一些有趣的活动,为 Garry's Mod 制作一些有趣的插件,角色扮演。

我正在尝试制作的插件是允许特定门出租,然后当有人租用该门时,主要所有者将收到定期付款!

我遇到了一些问题,即无法访问该表。

-- 门是一个元函数,是所有实体的属性。 -- 在这种情况下,它属于门。

cRentableDoors = cRentableDoors or  -- Global table

    function door:makeRentableSub( doorParent )
    -- GetNWBool() is a function used to network information
    -- on entities from server to client. ( so we can draw HUDs etc )

        if self:GetNWBool( "IsRentable" ) == false or nil then
                self:SetNWBool( "IsRentable", true ) 
                self:SetNWBool( "IsSub", true ) 

                cRentableDoors[doorParent:MapCreationID()] = 
                    MainDoor = doorParent,
                    SubDoors = ent = self, key = self:MapCreationID()
                

        end
    end

只有一个问题。当我想添加几个子门时,'SubDoors' 表只打印 1 个索引。我在这里覆盖了什么吗?

如有任何疑问,请随时提出!

谢谢!

【问题讨论】:

SubDoors = ent = self, key = self:MapCreationID() 剥离另一个 。目前SubDoors 是一个表。 非常感谢,谢谢! @HenriMenke,把它变成一个答案,这样它就可以被接受并且更容易被其他人找到。 【参考方案1】:

问题出在一行

SubDoors = ent = self, key = self:MapCreationID()

这里有两层大括号,这使得这个表达式等价于

SubDoors =  [1] =  ent = self, key = self:MapCreationID()  

这是一个包含一个条目的表。只需去掉外面的一对括号就可以了,即

SubDoors = ent = self, key = self:MapCreationID()

【讨论】:

以上是关于在lua中访问表的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 SDI 应用程序中访问 DLL 函数的正确方法是啥?

Lua实现简单的类,继承,多态 实例

截断表的正确 LINQtoSQL 方式是啥?

使用 pnp.core 和 pnp.framework 在 C# 中访问共享点文件夹和文件的正确方法是啥?

PHP访问数组值的正确方法是啥

lua奇怪的继承