在Lua中,有没有一种方法可以查找一个值属于哪个表?

有没有 Lua 中的函数可以告诉我 player.shape 表在哪里,这样我就可以像这样做:

shape_a = player.shape
some_function(shape_a) = player
点赞
用户734069
用户734069

Lua 中的值可以处于 _任何地方_。它可以同时存在于许多不同的位置。实际上,你的代码清楚地表明了这一点:

shape_a = player.shape

shape 表格现在存在于两个地方:全局表格(名称为 shape_a )和player表格(名称为 shape)。

值可以在局部变量中,这些变量实际上没有名称 (一旦编译器经过它们之后)

你想要的通常是不可能的。

2012-11-21 05:48:26
用户204011
用户204011

为什么不直接在形状中储存一个对父表的引用呢?

player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50, parent = player}

你可以使用元方法自动完成这个过程,如下所示:

local new_player = function()
  return setmetatable(
    {},
    {
      __newindex = function(t,k,v)
        if k == "shape" then v.parent = t end
        rawset(t,k,v)
      end,
    }
  )
end

player = new_player()
player.shape = {x = 0, y = 0, w = 50, h = 50}

现在你可以通过调用 shape.parent 来访问玩家。

2012-11-21 09:54:47
用户269870
用户269870

你可能在谈论 box2D 或是 Chipmunk 物理引擎,(我是指Nicol Bolas的回复中的评论)。

两者都有提供这样的方法,如果我没记错的话,在Chipmunk(我猜测你正在使用的)中有一个数据字段。

来自Chipmunk手册:

cpDataPointer cpBodyGetUserData(const cpBody *body)
void cpBodySetUserData(cpBody *body, const cpDataPointer value)

用户数据指针。使用这个指针从回调函数中获取拥有这个刚体的游戏对象的引用。

2012-11-21 11:18:08