Lua:多次调用返回字符串的Lua函数。如何使得字段跨越到下一个实例。

所以,我有一个C++程序,它递归遍历目录树,并在该目录中的所有文件上调用某个lua函数。

管理Lua和C++堆栈

你可以阅读我的先前问题,了解这个是如何工作的,但基本上它很简单。lua函数返回0到多个字符串。但是,一个lua返回的结果可能会影响后面的lua返回结果。(具体来说,我正在尝试删除重复的字符串,和一些其他的东西)

我想知道是否有一种设置方式,可以让我仍然可以进行这些lua调用,但是让lua状态在递归操作期间保持打开状态。通过这种方式,我应该可以在递归过程中保留变量和其他重要信息,这将使我能够轻松扩展程序的功能。

我的C++应用程序使用了我开源的界面FileDigger,它允许我填写逻辑以在beforeDig()、afterDig()和fileFound()之前执行。

目前这是我的代码:

// 翻译这里的代码格式

所以,正如您所看到的,在fileFound函数中,我创建并移除一个状态。我正在考虑改为在beforeDig()中启动Lua状态,在afterDig()中结束它。

此外,现在我的Lua源直接在.lua文件中调用,而不是调用包含该代码的特定函数。我认为我可能需要改变一下这个...所以...如果您还有问题,我会回答它们,但让我们开始讨论吧!:D

原文链接 https://stackoverflow.com/questions/6713437

点赞
stackoverflow用户596285
stackoverflow用户596285

你需要重新设计你如何使用 Lua。你需要在你的脚本之前设置一个名为 setupinit 的函数来设置 Lua 状态,就像这样:

function init_lua()
  local L = lua_open()
  luaL_openlibs(L)
  luaL_loadfile(L, "src/language.lua")
  return L
end

在 Lua 中,你需要定义函数和本地变量以在函数调用之间使用,例如:

local data_store -- 这是你缓存数据的地方
function my_func (path)
  -- 在这里做一些有关路径和你的数据存储的操作
end

然后,在你的程序中,你需要获取并调用你的函数而不是重新加载或编译脚本:

lua_getglobal(L, "my_func")
lua_pushstring(L, path.c_str())
lua_pcall(L, 1, 1, 0)
/* 以此类推 */

请注意,错误处理和使用模块而不是全局变量需要读者自行练习。

2011-07-16 00:50:38