Tag: lua

如何在C API中生成ipairs(而不是成对)行为

在Lua中, pairs和ipairs可以以不同的顺序迭代相同的元素: > t = {[1]=1, [2]=2, [3]=3} > for k,v in pairs(t) do print(k,v) end 2 2 1 1 3 3 > for k,v in ipairs(t) do print(k,v) end 1 1 2 2 3 3 当使用C API时,我只看到一个用于迭代表的工具: lua_next()函数,它的行为非常像pairs() Lua函数,它产生上面显示的2-1-3顺序。 我正在寻找一种有效的C方法,用于顺序迭代表的整数键(ipairs的C API版本)。 天真地,我考虑过: int tableLength = luaL_len(L, tableIndex); for (i=0, i++, i>tableLength){ // if t[i] […]

在C / C ++中引用Lua函数

我有一个函数嵌套在一组表中相对较深。 在C / C ++中是否有一种方法可以获得该函数的“引用”,并在需要使用它时将其(和args)推送到堆栈中?

省略Lua标准库的最佳方法是什么?

删除或省略Lua标准库包的最佳方法是什么? 例如,删除特定环境中的os库函数 。 有问题的项目是从源文件构建Lua,所以我可以编辑源代码,尽管如果可能的话我宁愿通过API来完成。

Lua 5.2 LUA_GLOBALSINDEX替代方案

我有一个嵌入Lua的程序,并实现了一种惰性函数查找。 它在Lua 5.1中的工作方式,只要符号未定义,解释器就会调用一个全局函数钩子,然后解析符号。 这是实现这个惰性函数查找的C代码的一小部分: int function_hook(lua_State *pLuaState) { // do the function lookup here …. return 1; } …… //– create table containing the hook details lua_newtable(pLuaState); lua_pushstring(pLuaState, “__index”); lua_pushcfunction(pLuaState, function_hook); lua_settable(pLuaState, -3); //– set global index callback hook lua_setmetatable(pLuaState, LUA_GLOBALSINDEX); 我现在正试图将此代码移至Lua 5.2并遇到问题。 在Lua 5.2中,不再定义LUA_GLOBALSINDEX值,因此这行代码不再编译。 //– set global call back hook lua_setmetatable(pLuaState, LUA_GLOBALSINDEX); LUA_GLOBALSINDEX有一个对此更改的引用 ,但不幸的是它没有帮助。 […]

如何在C二进制文件中嵌入Lua脚本?

我已经在shell世界中被宠坏了,我可以做: ./lua < x=”hello world” > print (x) > EOF hello world 现在我试图在C应用程序中包含一个Lua脚本,我期望它会随着时间的推移而增长。 我从一个简单的开始: const char *lua_script=”x=\”hello world\”\n” “print(x)\n”; luaL_loadstring(L, lua_script); lua_pcall(L, 0, 0, 0); 但这有几个缺点。 首先,我必须逃避换行和引用。 但是现在我的string length ‘1234’ is greater than the length ‘509’ ISO C90 compilers are required to support在使用gcc进行string length ‘1234’ is greater than the length ‘509’ ISO C90 compilers are […]

Lua是否优化了“..”运算符?

我必须执行以下代码: local filename = dir .. “/” .. base 循环中数千次(这是一个打印目录树的递归)。 现在,我想知道Lua是否一次性连接3个字符串(dir,“/”,base)(即,通过分配足够长的字符串来保存它们的总长度),或者它是否通过内部执行它来实现这种效率低下的方式两步: local filename = (dir .. “/”) — step1 .. base — step2 最后一种方式是内存方式效率低下,因为分配了两个字符串而不是一个字符串。 我不太关心CPU周期:我主要关心内存消耗。 最后,让我概括一下这个问题: Lua在执行以下代码时是否只分配一个字符串或4? local result = str1 .. str2 .. str3 .. str4 .. str5 顺便说一句,我知道我能做到: local filename = string.format(“%s/%s”, dir, base) 但我还没有对它进行基准测试(内存和CPU方面)。 (顺便说一句,我知道table:concat()。这会增加创建表的开销,所以我猜它在所有用例中都不会有用。) 奖金问题: 如果Lua没有优化“..”运算符,那么定义用于连接字符串的C函数是一个好主意,例如utils.concat(dir, “/”, base, “.”, extension) ?

luaL_openlib替换Lua 5.2

我正在调整为Lua <5.2编写的库,并接到一个我不知道相当于的电话: luaL_openlib(L, “Polycore”, polycoreLib, 0); polycoreLib是一个 static const struct luaL_Reg polycoreLib [] 如何替换对luaL_openlib的调用? lua wiki只说 : 调用诸如luaL_openlib(L, name, lreg, x); 应该仔细重写,因为将搜索具有给定名称的全局表并可能创建该表。

从C ++ / C设置全局LUA_PATH变量?

我正在尝试直接从C / C ++设置我的全局LUA_PATH变量,我在我的iPhone应用程序中使用Lua,所以我的路径往往会在应用程序之间发生变化(每个iPhone应用程序在设备中都有一个单独的文件夹)。 我知道我可以通过使用“固定”路径重新编译lua来设置LUA_PATH,但这远非理想。 (我正在尝试这样做,以便能够使用我的.lua脚本中的.lua 。 谁能帮到我这里?

来自USB的C ++和Lua

所以大约两周前,我开始学习C ++和Lua,我希望能够: 编译C ++代码(如果我可以拥有一个C编译器,这将是一个很好的奖励,因为我的语言列表中的下一个要学习) 解释(这是正确的术语吗?)Lua,和 从我的usb驱动器中完成所有这些操作,无需从Internet下载任何内容或更改路径变量。 (我将主要在学校的电脑上工作。) 作为旁注,我已经爱上了Sublime Text 2(便携式版本已经在我的USB驱动器上)。 如果它是绝对必要的,我会没有它,但我宁愿能够随时随地使用它。 请耐心等待我,正如我之前提到的,我刚刚开始学习如何编程,而我几乎不知道如何工作。 我见过类似的问题,但由于我的知识有限,他们似乎从来没有给我太多帮助 ,所以请不要像我在这个网站上看到的那些人那样毫不留情地关闭我的问题。 先感谢您!

Lua table.getn()返回0?

我已经将Lua嵌入到我的C应用程序中,并试图找出为什么在我的C代码中创建的表通过: lua_createtable(L, 0, numObjects); 并且返回Lua,当我调用以下内容时将产生零结果: print(“Num entries”, table.getn(data)) (其中“data”是由lua_createtable创建的表) 表中有明显的数据,因为我可以通过以下方式遍历每个条目(字符串:userdata)对: for key, val in pairs(data) do … end 但是为什么table.getn(data)返回零? 当我用lua_createtable创建它时,是否需要在表的元数据中插入一些东西? 我一直在寻找lua_createtable使用的例子,我没有看到这在任何地方都做过….