【问题标题】:LUA - How to call a function from a string using the _G[x]() methodLUA - 如何使用 _G[x]() 方法从字符串调用函数
【发布时间】:2013-03-15 11:11:53
【问题描述】:

我的代码有问题,我不知道发生了什么,我在网上搜索过,建议 _Gx 方法是最好的方法,而不是像 loadstring(x) 这样的方法......虽然我会对任何一个都满意,不能让任何一个工作。我想要做的是,在 ComputerCraft 中,将函数名称和参数发送给海龟,我通过将两个值保存到表中并跨表发送,然后在海龟的程序上,有一个大列表函数,并使用命令,从发送的字符串中调用它们并插入 arg。我的错误是“尝试调用 nil”,我不太明白为什么会这样说......在此先感谢!

编辑

我已按要求编辑了我的代码,以表明即使剥离所有其他内容,这仍然失败。我什至可以通过将变量完全取出并将字符串直接放入_G来进一步剥离它。即使这样做仍然失败。我决定保留它,因为这就是我以后实际使用它的方式。调用该函数通常可以正常工作。我使用的是 Luaj-jse 2.0.3 版本

function foo ()
  print ("HI!")
end

print (_VERSION)

【问题讨论】:

  • 你使用的是什么版本的 Lua? (应该有一个带有该信息的全局 _VERSION 变量)。你认为你能想出一个独立的例子来展示你的问题,而不需要事件处理和类似的东西吗?
  • 它运行的是 Luaj-jse 2.0.3 版本在 LuaJ 网站上,它在版本描述下声明其版本 3.0.x 支持 _ENV 环境模型... (luaj.org/luaj/README.html)我们在这里谈论什么?我正在考虑在发布时删除消息接收者,我会在我回家时删除所有多余的代码。感谢您的帮助。

标签: function lua minecraft


【解决方案1】:

我不知道rednet 是什么,但您似乎将函数的名称传递给了另一个 Lua VM,该 VM 对此函数一无所知(该函数在该 VM 的全局表中不存在)。 因此,将函数定义作为字符串传递并由接收者使用loadstring 执行它是唯一的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多