【发布时间】:2019-03-25 13:05:42
【问题描述】:
我想向 lua 对象添加一些方法或属性,因为元数据是由 C API 创建的。我无法以正常方式添加属性,例如:
local foo = libc.new()
foo.bar = "hello"
它说:
运行脚本失败:尝试索引 libc_meta 值(本地“foo”)
所以我认为可能需要修改元表,所以我更改了代码:
local foo = libc.new()
local mt = getmetatable(foo)
foo[bar] = "hello"
setmetable(foo, mt)
不幸的是,它仍然不起作用。
无法运行脚本:'setmetatable' 的参数 #1 错误(应为表,已获取 libc_meta)
那么我怎样才能给这个'foo'添加方法或属性呢?
顺便说一句,c代码在这里:
static int libc_new(lua_State *L) {
...
lua_lib_space *libc = lua_newuserdata(L, sizeof(*libc));
libc->L = L;
libc->cb_enter = cb_enter;
libc->cb_leave = cb_leave;
luaL_getmetatable(L, "libc_meta");
lua_setmetatable(L, -2);
lib_space *lib = lib_new(enter, leave, libc);
libc->space = lib;
return 1;
}
【问题讨论】:
标签: lua