在Lua中,有没有办法找出值是什么表?

时间:2012-11-21 05:29:11

标签: lua

示例:

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

Lua中是否有一个函数可以告诉我player.shape表是什么,所以我可以这样做:

shape_a = player.shape
some_function(shape_a) = player

3 个答案:

答案 0 :(得分:4)

为什么不在形状中存储对父表的引用?

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

你可以使用这样的metamethods自动执行此操作:

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来访问该形状的播放器。

答案 1 :(得分:1)

Lua中的值可以任何地方。它可以同时在许多不同的地方。实际上,您的代码清楚地显示了它:

shape_a = player.shape

shape表现在分为两个位置:全局表(名称为shape_a)和player表(名称为shape)。

值可以是局部变量,它们实际上没有名称(编译器通过它们时没有。

您通常无法做到。

答案 2 :(得分:0)

你可能在谈论box2D或者花栗鼠物理。 (我在提到Nicol Bolas回复中的评论)。

他们两个都有办法做到这一点,如果我记得很清楚,在Chipmunk(这是我猜你正在使用的)有一个数据字段。

来自花栗鼠手册:

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

用户数据指针。使用此指针获取游戏的引用   从回调中拥有此主体的对象。