问题标签 [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.
c++ - 存储和返回 Lua 用户数据
我在 C++ 中有以下类
以及部分lua绑定代码:
我想将这些作为用户数据包装在 Lua 中,这样我就可以执行以下操作:
当我打印的地址时b
,b2
我得到两个唯一的地址,这是有道理的,因为我已经调用了lua_newuserdata
. 但理想情况下,我希望它返回相同的用户数据,因为它们指向相同的内存块。如何做到这一点?
我希望 Lua 负责内存,因此它会在垃圾收集时被正确删除。所以我不知道轻用户数据是否可能。
lua - 在 lua 中为 luaglut glReadPixels 创建 lightuserdata
我正在使用 luaglut,当我尝试使用glReadPixels
来捕获帧时,我无法成功为其准备最后一个输入参数。
这就是我调用函数的方式:
这img
是我要存储框架的地方,但无论我定义 img 的类型,总是有错误。编译器总是想要lightuserdata,但我已经搜索了几天,似乎没有办法在 lua 中创建这种类型的数据。
我应该如何处理这个问题?先感谢您!
java - LuaJ 数组/列表类型安全
所以使用LuaJ。
如果我从 Java 向 Lua 传递一个List<T>
type的 userdata,Luaj 仍然允许通过该函数T
将任何类型的对象插入到该数组中。:add
例如:
Java代码:
卢阿:
ExampleList 的结果:
该字符串不应该被允许,因为ExampleList
它是List<Integer>
问题:有什么方法可以保持类型安全?
如果它有助于测试,这里是将 lua 脚本添加到 lua 内存中的代码(就在 之前try{}
):
c++ - Lua 用户数据指针的生命周期
如果我创建一个 userdata 对象并将其存储在表中,然后在 C/C++ 中获取对它的引用,该引用的有效期是多久?只要用户数据保存在 Lua 的表中,C/C++ 中的引用是否保证有效?或者 Lua 运行时会移动 userdata 对象,从而使 C/C++ 对它的引用无效?
这就是我正在做的事情:
我最好在这里使用operator new
轻量级用户数据吗?
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。
lua - love2D 错误:解压预期表得到用户数据
当我尝试解包此表以调用图像时,程序返回错误“解包的参数错误(表预期得到用户数据)”
这是我正在使用的表
这是我尝试拆开桌子的地方
lua - Lua - 实现用户数据迭代器
Lua 5.2 我需要迭代一个userdata
变量。据我了解,我可以使用getmetatable
and来做到这一点__pairs
。像这样:
但是当我尝试这样做时,我会“尝试调用零值”。
我在__pairs
这里找到了一个实现:lua __pairs 的实际实现是什么?
但我不明白我应该怎么做theseok
?我应该在这里定义什么功能?
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) 返回后,才会建立引用,但我可以调用垃圾收集器吗?):
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 入门课程,以达到我需要的目标?
(如果我在这个问题上无意中违反了任何社区规范,我深表歉意……这是我第一次发帖)