【问题标题】:Access Lua variables in userdata from the C api从 C api 访问 userdata 中的 Lua 变量
【发布时间】:2013-07-27 20:54:42
【问题描述】:

我正在开发一个用 C++ 编写的项目,该项目使用 Lua 作为脚本语言。 为了方便调试,我们实现了一个网络调试器,它接收 Lua 代码,运行它,在 Json 中编码返回值并将该字符串发回。

我设法为表实现了这一点,但现在我被存储在用户数据中的变量卡住了。 例如。我有这个 Lua 代码:

Elements.Avatar.testVar = 5

Elements.testVar = 15

return Elements    

// result
{
  "result0": "{Application:userdata; Avatar:userdata; Physics:userdata; testVar:15; }"
}

ApplicationAvatarPhysics 是在 C++ 中创建的对象。然而,这两个 testVars 已在上面的脚本中创建。 Elements 是一个表格,所以我可以列出所有元素,但 Avatar.testVar 似乎被隐藏了,因为 AvatarLUA_TUSERDATA

有人知道如何检测已添加到 Lua 中用户数据的变量吗?

【问题讨论】:

    标签: c lua lua-userdata


    【解决方案1】:

    没有“存储在用户数据中的变量”之类的东西,至少就 Lua 而言不是这样。从 Lua 的角度来看,userdata 是一个巨大的黑匣子。所有Avatar.testVar = 5 所做的只是调用Avatar 中的元方法__newindex,使用字符串testVar 和新值15。您的 C++ 元方法(因为只有 C++ 代码可以将元方法放在用户数据上)如何解释这一点完全取决于您的代码。

    所以它不能在 Lua 中完成。您的代码将需要提供调试挂钩。 Lua 5.2 允许你实现__pairs__ipairs 元方法,pairsipairs 函数可以用来迭代你的值。除此之外,您需要自行查询用户数据中存在和不存在的内容。

    【讨论】:

    • 好的,这很有帮助。我试图从 C++ 端列出这些值,所以这不是问题。我正在使用 OOLUA 来简化 lua 的实现,这让我假设将值与 userdata 对象一起存储的选项是该语言固有的。所以这意味着我必须检查 OOLUA 提供的绑定代码来了解我的 Avatar.testVar 是如何存储的?
    • @user2626359:嗯,大概testVar 是您使用 OOLUA 公开的任何 C++ 类中的 C++ 变量的名称,是吗?
    猜你喜欢
    • 2012-10-28
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多