Tag: lua

在C中获取Lua表大小

如何在C中获得Lua表的大小? static int lstage_build_polling_table (lua_State * L) { lua_settop(L, 1); luaL_checktype(L, 1, LUA_TTABLE); lua_objlen(L,1); int len = lua_tointeger(L,1); printf(“%d\n”,len); … } 我的Lua代码: local stages = {} stages[1] = stage1 stages[2] = stage2 stages[3] = stage3 lstage.buildpollingtable(stages) 它总是打印0。 我究竟做错了什么?

`lua_load()`如何工作?

我如何将一大块Lua代码作为char加载并使用此函数运行它? 如果没有,我可以使用什么其他function以及lua_load()如何工作?

如何从C读取火炬张量

我必须使用Torch框架训练卷积神经网络,然后在C中编写相同的网络。为此,我必须以某种方式从我的C程序中读取网络的学习参数,但我找不到办法将Torch Tensors转换或写入文件以使其在C中可读。理想情况下,我想将Tensors转换为C中的double数组。 有谁知道这是怎么做到的吗? 提前致谢 :)

加载模块未定义符号时出错:luaL_setfuncs

我正在尝试创建一个从lua脚本调用的C模块。 我正在研究debian linux。 我正在使用mysql-proxy和lua 5.2。 我已创建(从教程中复制)一些要调用的示例函数。 加载器的定义如下: int luaopen_luacall(lua_State* l) { luaL_newlibtable(l, luacall); luaL_setfuncs(l, luacall, 0); return 1; } 要从lua调用它,我使用以下代码: luacall = require(“luacall”) local f = luacall.fun1() 我用这个命令编译了它: g++ -shared -Wl,-E,-soname,libluacall.so -o luacall.so luacall.c -fPIC -llua -ldl 当我尝试运行脚本时,我在require命令上收到以下错误: error loading module ‘luacall’ from file ‘/usr/lib/mysql-proxy/lua/luacall.so’: /usr/lib/mysql-proxy/lua/luacall.so: undefined symbol: luaL_setfuncs 我真的迷失了我做错的事。

可以使用双精度来表示64位数而不会丢失精度

我想使用lua(内部仅使用双精度)来表示一个整数,该整数不能在0到2 ^ 64-1之间出现舍入误差,否则会发生可怕的事情。 有可能这样做吗?

Lua:垃圾收集+ userdata

假设以下情况: typedef struct rgb_t {float r,g,b} rbg_t; // a function for allocating the rgb struct rgb_t* rgb(r,g,b) { rgb_t* c = malloc(sizeof(rgb_t)); c->r=r; c->g=g; c->b=b; return c; } // expose rgb creation to lua int L_rgb (lua_State* L) { rgb_t** ud = (rgb_t **) lua_newuserdata(L, sizeof(rgb_t *)); *ud = rgb(lua_tonumber(L,1),lua_tonumber(L,2),lua_tonumber(L,3)); return 1; } 当从Lua调用L_rgb函数时,会发生两次分配。 Lua分配新的userdata并为结构分配rgb构造函数。 […]

用Lua注册一个闭包

我没有使用lua_CFunction签名来编写从Lua调用的方法,而是想使用我自己的函数签名来简化导出过程。 void foo(call_t *call) { int a; char *b; char *c; table_t *d; /* reading arguments */ a = read_integer(call); b = read_string(call); /* do something… */ /* writing arguments */ write_string(call, c); write_table(call, d); } /* export to Lua */ export(“foo”, foo); 到目前为止,我能想到的只有一个lua_CFunction,它从表中调用包装函数。 但是,我不知道如何将Lua函数与C函数和表索引相关联,以便有效地使Lua函数成为闭包。 像这样的东西: lua_register_with_data(state, “foo”, base_function, FOO_INDEX); 我怎样才能做到这一点?

将C结构指针传递给lua脚本

我想知道有没有办法将结构指针传递给lua脚本,并从lua到达它的成员而不需要复制(用于读写目的)。 那么,例如是否可以直接通过其指针覆盖ac结构的成员? (我正在使用luajit)

恢复Lua线程时如何处理错误(coroutine)

背景:我正在使用Lua线程(协程)来处理来自stdin的用户输入(允许程序在等待来自另一个FD的数据时暂停)。 因为它是用户输入,如果不可能,则可能出现错误,例如调用不存在的函数。 问题:是否可以恢复Lua线程以便我可以继续处理来自stdin的更多数据,或者我是否必须在每个错误之后编写线程并创建一个新线程? 这是我现在正在做的一些粗略的示例/伪代码: while (1) { select((max, &read_fds, &write_fds, NULL, NULL); for each file descriptor { if (read fd is set) { read data into a buffer if (current fd is stdin) process_stdin() else if (current fd is from server connection) process_remote() } if (write fd is set) { write data on non-blocking fd […]

如何在userdata中存储值类型?

这篇SO文章是一回事,但答案是无益的,因为答案是在Lua中,问题是关于C-API。 所以我再问一遍。 希望其他人能从这个问题中受益。 我实际上有两个问题(我不能让你工作,我不能让helloworld()工作) 我想要达到这个目的: local x = MyCBoundLib.GetSomething() print(xy) print(xz) 其中x是用户数据。 我一直attempt to index a userdata value 我知道“ 没有metatable , userdata是不可索引的,因为它是C / C ++数据 ” 在我的C代码中,我做了类似的事情来尝试包装对象。 int push_Something(lua_State *L, void *object) { struct SomethingWrapper *w = (struct SomethingWrapper *)lua_newuserdata(L, sizeof(struct SomethingWrapper)); w->object = object; luaL_setmetatable(L, “Something”); return 1; } 早些时候,我试图注册一个名为Something的metatable,如下所示: luaL_newmetatable(L, “Something”); lua_pushvalue(L, -1); […]