在Lua中将用户数据视为表格进行处理。
2010-7-26 5:48:46
收藏:0
阅读:155
评论:1
我有一些C ++类,我想将它们暴露给Lua使用。我可以调用 Widget:New()
来获取返回 user data,并将元表设置为表 WidgetMeta
。WidgetMeta
包含所有的C ++函数,它的 __index
被设置为它自己,所以我可以这样做:
w = Widget:New()
w:Foo() -- Foo is defined in C code
这很简单明了。
现在我遇到了无法解决的部分。我希望能够将Lua定义的变量和函数直接放在我的 user data 上,就像它是一个表一样。显然这是不可能直接实现的。我不能把它放在 user data 上,因为我希望它对于每个 user data 都是唯一的。
w1 = Widget:New()
w2 = Widget:New()
function w1:Bar() print "Hello!" end -- Both functions unique
function w1:Baz() print "World!" end -- to their own userdata
我当前的解决方案是:在元表上放一个特殊的表,用它来映射 user data 和表,我可以在其中存储各种 user data 的函数和变量。问题是我不确定如何最好地实现它,或者是否有更好的解决方案。所以我的问题有两个方面:当我设置我的 __index
和 __newindex
元方法时,是在文本文件中编写它们的 Lua 代码并在运行其他所有内容之前运行它,还是通过 luaL_loadstring
直接从 C 字符串中放入 Lua 代码,或者使用 C 接口进行处理所有堆栈操作?第二,如何编写该函数……但是,一旦我决定采取哪种方法,我就会处理它。
原文链接 https://stackoverflow.com/questions/3332448
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
给用户数据添加一个函数环境,并通过它重定向访问。 下面是我的一些旧代码,描述了这个过程。
static int l_irc_index( lua_State* L ) { /* 对象,键 */ /* 先检查环境 */ lua_getfenv( L, -2 ); lua_pushvalue( L, -2 ); lua_rawget( L, -2 ); if( lua_isnoneornil( L, -1 ) == 0 ) { return 1; } lua_pop( L, 2 ); /* 然后检查元表 */ lua_getmetatable( L, -2 ); lua_pushvalue( L, -2 ); lua_rawget( L, -2 ); /* 如果为空,则返回 */ return 1; } static int l_irc_newindex( lua_State* L ) { /* 对象,键,值 */ lua_getfenv( L, -3 ); lua_pushvalue( L, -3 ); lua_pushvalue( L, -3 ); lua_rawset( L, -3 ); return 0; }