问题标签 [lua-userdata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1811 浏览

c++ - 存储和返回 Lua 用户数据

我在 C++ 中有以下类

以及部分lua绑定代码:

我想将这些作为用户数据包装在 Lua 中,这样我就可以执行以下操作:

当我打印的地址时bb2我得到两个唯一的地址,这是有道理的,因为我已经调用了lua_newuserdata. 但理想情况下,我希望它返回相同的用户数据,因为它们指向相同的内存块。如何做到这一点?

我希望 Lua 负责内存,因此它会在垃圾收集时被正确删除。所以我不知道轻用户数据是否可能。

0 投票
1 回答
892 浏览

memory-leaks - 在 userdata 对象中添加 lua 表时发生 Lua 内存泄漏

★★★★★代码点击这里!!!★★★★★"></p> <p>当我按下'btn'时内存从80M上​​升到240M。我按下'btn2'删除了object(self.sprite) 包含了很多lua表,但是内存没有下降。</p> <p>这段代码有什么问题?还是lua的bug?</p> <p>我用的是cocos2dx -3.8.1/xcode7/ios 模拟器。</p> <pre><code>local MainScene = class(

0 投票
1 回答
114 浏览

lua - 在 lua 中为 luaglut glReadPixels 创建 lightuserdata

我正在使用 luaglut,当我尝试使用glReadPixels来捕获帧时,我无法成功为其准备最后一个输入参数。

这就是我调用函数的方式:

img是我要存储框架的地方,但无论我定义 img 的类型,总是有错误。编译器总是想要lightuserdata,但我已经搜索了几天,似乎没有办法在 lua 中创建这种类型的数据。

我应该如何处理这个问题?先感谢您!

0 投票
1 回答
1087 浏览

java - LuaJ 数组/列表类型安全

所以使用LuaJ。

如果我从 Java 向 Lua 传递一个List<T>type的 userdata,Luaj 仍然允许通过该函数T将任何类型的对象插入到该数组中。:add例如:

Java代码:

卢阿:

ExampleList 的结果:

该字符串不应该被允许,因为ExampleList它是List<Integer>

问题:有什么方法可以保持类型安全?

如果它有助于测试,这里是将 lua 脚本添加到 lua 内存中的代码(就在 之前try{}):

0 投票
2 回答
1139 浏览

c++ - Lua 用户数据指针的生命周期

如果我创建一个 userdata 对象并将其存储在表中,然后在 C/C++ 中获取对它的引用,该引用的有效期是多久?只要用户数据保存在 Lua 的表中,C/C++ 中的引用是否保证有效?或者 Lua 运行时会移动 userdata 对象,从而使 C/C++ 对它的引用无效?

这就是我正在做的事情:

我最好在这里使用operator new轻量级用户数据吗?

0 投票
1 回答
683 浏览

c - Lua userdata:无法同时访问数组和方法

我遇到了这个人的问题: Lua userdata array access and methods

其中,当我设置我的用户数据元表的 __index 时,它总是调用 getter,而不是我没有为元事件声明的其他方法。上述链接的解决方案是在 Lua 中,我尝试了一个看起来不优雅的 C 实现,但无论如何,它会产生一个新问题,因为我的新方法不能再接受参数,并且我收到此错误:

attempt to call method 'asTable' (a table value)

在这个 Lua 声明中:

print_r(c:asTable() )

这就是我设置所有内容的方式:

然后在默认调用的getter(通过__index)中,我首先检查我打算调用的其他事件并将控制权转移给它们,如下所示。请注意,我从堆栈中删除了包含函数名称的参数。

无论传递了多少参数,它都不会将我的方法视为函数,并且即使有任何括号或冒号也会引发错误。(它可以通过 来访问c.asTable,这对于不带参数的方法工作得很好,但我计划添加一些这样做的方法,无论如何,语法与方法不一致。

在任何情况下,最好不要通过我的 C getter 调用这些函数,而是使用元表来解决这个问题。如果可能,请提供一个使用 C API 的示例——Lua 中已经有 StackOverflow 解决方案,但我无法将它们翻译成 C。

0 投票
1 回答
593 浏览

lua - love2D 错误:解压预期表得到用户数据

当我尝试解包此表以调用图像时,程序返回错误“解包的参数错误(表预期得到用户数据)”

这是我正在使用的表

这是我尝试拆开桌子的地方

0 投票
1 回答
699 浏览

lua - Lua - 实现用户数据迭代器

Lua 5.2 我需要迭代一个userdata变量。据我了解,我可以使用getmetatableand来做到这一点__pairs。像这样:

但是当我尝试这样做时,我会“尝试调用零值”。

我在__pairs这里找到了一个实现:lua __pairs 的实际实现是什么?

但我不明白我应该怎么做theseok?我应该在这里定义什么功能?

0 投票
1 回答
536 浏览

c++ - 当同时使用 lua_newuserdata 时,何时允许在 C++ 中调用 lua_gc

下面的例子只是为了演示问题/问题;实际上,我有创建和返回许多不同 userdata 对象的函数,其中一些我可能想调用 Lua 垃圾收集器。

另外,我使用的是 Lua 版本 5.3.3,在 Windows 和 Linux 上都运行。为简单起见,未显示错误处理。

我有一个通过标准用户数据向 Lua 公开的 C++ 类,如 Roberto Ierusalimschy 的“在 Lua 中编程”中所述。我的问题是我不确定 Lua 何时确实引用了我的对象,那么何时允许我通过 C++ lua_gc 函数调用垃圾收集器?

例如,我有带有构造函数和析构函数的标准 Foo C++ 类。并使用名为 ReleaseFoo 的 __gc 入口函数定义了一个元表“FOO”,如图所示。

我通过以下 C++ 代码在 Lua 中创建一个实例:

在 Lua 中,它的使用看起来像(所以只有在 C++ 函数 NewFoo(L) 返回后,才会建立引用,但我可以调用垃圾收集器吗?):

0 投票
0 回答
116 浏览

lua - 在没有 C 的情况下将用户数据带入 Lua(或者我需要学习多少 C 才能做到这一点)

嗨,提前感谢。我试图看看是否有办法避免学习 C(我根本不知道)将 userdata 转换为 Lua 表。

我正在使用一个允许用户使用 Lua 脚本编写插件的应用程序。这些插件可以查询应用程序的底层数据。但是查询结果作为用户数据返回,我需要它们在脚本中可用。

我无法在应用程序文档中找到有关使用返回数据集的任何内容。给出的唯一描述是我正在运行的操作:

执行当前分配的查询字符串,并使用结果来构造一个 DataSet 对象(如果返回多个结果集)或一个 DataTable(如果返回一个或不返回结果集)。

就我而言,我将获得多个结果集,我将其称为用户数据,因为这是我在调用type()查询结果时得到的。

我查看了 Lua文档,它似乎很有用,但对 CI 缺乏任何熟悉,不知道我在看什么。元表告诉我我可以访问__index__newindex__tostring__gc元方法。调用tostring给我一个七位数的整数,(我认为)与我的数据完全无关。有可能我什至根本没有得到我想要的数据,但我想不出办法来检查它。在线资源要么说这不能完成,要么提供 C 语言的解决方案,这些解决方案可能很聪明、干净、很棒,但我不明白。

所以我正在寻找一些更明确的指导,说明我是否可以/应该这样做,是否有办法在没有 C 的情况下做到这一点(或者只是盲目地复制别人的代码),或者 - 如果我需要为此使用 C -- 如果我们谈论的是 90 分钟或 7 小时的 Lynda C 入门课程,以达到我需要的目标?

(如果我在这个问题上无意中违反了任何社区规范,我深表歉意……这是我第一次发帖)