【问题标题】:Lua 5.2 redirecting the print function [duplicate]Lua 5.2重定向打印功能[重复]
【发布时间】:2012-09-01 02:17:39
【问题描述】:

可能重复:
Redirecting/redefining print() for embedded Lua

我是 Lua 新手,很困惑。 我见过this,但我不确定它是否适用于 5.2。

我已经阅读了 _ENV 表(?),但再次不确定这是否与它有关。

那么问题来了: 如何在 C/C++ 中重定向 Lua 5.2 的内置打印函数以调用我自己的 C/C++ 函数?

【问题讨论】:

  • 链接问题中评分最高的答案不适合您吗?
  • 我无法对其进行测试,因为它不完整 - 它假设您知道如何填写所需的其余代码 - 我不......但是......而且我不认为在 5.2 中全局空间不再被称为“_G”(我可能是错的)
  • @OlegV.Volkov OP 提到了这个问题,并表示他不确定自己的情况。
  • @Eregrith,作为副本被关闭可以很好地保证它确实是完全相同的问题。
  • @OlegV.Volkov:在简单的情况下你可以。在更微妙的情况下,它可能不会影响先前加载的块中的代码(虽然它会在 Lua 5.1 中这样做。)OP 关心_ENV 是正确的,我认为这使得这个问题与另一个问题不同.

标签: c++ c lua lua-5.2


【解决方案1】:

来自Lua 5.2 manual

Lua keeps a distinguished environment called the global environment.
This value is kept at a special index in the C registry (see §4.5).
In Lua, the variable _G is initialized with this same value.

因此,如果您将对luaL_register 的调用替换为对luaL_setfuncs 的调用,this answer to the question you linked 将起作用。

【讨论】:

  • 很好的发现 - 谢谢。唯一的问题是 5.2 不再有 luaL_register 调用。因此,要么需要更新“重复”以反映 5.2 的更改,要么这不是重复的问题?
  • 也许答案在this page解决模块系统和模块功能问题部分:The module/luaL_register functions are deprecated and replaced by luaL_newlib and luaL_setfuncs.
  • Thx @Eregrith:你的两个建议都有帮助,这让我解决了问题:gist.github.com/3671566 而其他 duplicate 没有 NOT使用 5.2 - 你们使用重复按钮太快了:P(重新打开它会很好,这样我就可以将代码放到其他人使用)。
  • 我不知道该怎么做:/
  • 嗯?你为什么不接受这个?
猜你喜欢
  • 2012-09-05
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多