【问题标题】:How to add function definition in Lua without requiring that a file be loaded?如何在 Lua 中添加函数定义而不需要加载文件?
【发布时间】:2011-12-22 04:17:17
【问题描述】:

我正在使用 C Fuzzy API,我想加载文件中包含的功能模块,比如说 mycalculator.lua。这似乎运行良好,但是当我稍后尝试运行另一个需要“mycalculator”的文件 A.lua 时,它不起作用,除非文件系统上可以重新加载 mycalculator.lua 文件。我试图将其加载到系统中,然后在文件系统中没有 mycalculator.lua 的情况下使其可用。有什么方法可以让 lua 系统保留定义而不再次加载它?基本上我将 mycalculator.lua 转换为字符串,然后运行它。我不想将 mycalculator.lua 文件放入文件系统,我只想将其作为字符串传递,然后能够在传递给堆栈的下一个字符串中使用它 谢谢

【问题讨论】:

  • 什么你有地方放那个字符串?字符串不会神奇地存在于文件系统中,它们总是需要某种存储。你打算如何执行 A.lua?

标签: lua


【解决方案1】:

简单地执行 Lua 脚本和加载 Lua 模块是有区别的。如果你想加载一个 Lua 模块,那么你必须像脚本一样实际加载一个 Lua 模块:调用require

既然你似乎是 Lua 的新手,我应该解释一下。你可能在 Lua 脚本中见过这样的代码:

require 'mycalculator'

这不是对 Lua 的特殊声明。那是一个函数调用。它只是一些语法糖:

require('mycalculator')

Lua 中的函数可以用NAME VALUE 语法而不是NAME(...) 语法调用,但它只允许你发送一个参数。并且参数必须是字面量(或表构造函数)。

为了从 C 中调用 Lua require 函数,您必须使用 Lua 堆栈。您必须使用lua_getfield(L, LUA_GLOBALSINDEX, "require"); 从全局表中获取函数然后,您将包含要加载的模块名称的字符串压入堆栈。然后,您使用lua_pcall 或任何 Lua 函数调用函数来调用它。

【讨论】:

  • 好的。好吧,我有兴趣加载/要求模块并将此要求作为字符串传递。我想传递一个包含所需模块内容的字符串,以便 lua 永远不会进入该模块的文件系统。这个可以吗?
  • 所以在需要加载时,我不希望 lua 检查文件系统,而是想将此模块作为字符串传递。
  • 所以我要问的是我不想使用类似下面的东西:path = "./path/to/a/file.lua"
  • 相反,我想将文件内容提供给 lua。
  • 我已经转贴了 LUA Java 并加载了一个字符串:stackoverflow.com/questions/8599597/…
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多