如果我使用相同的键两次推送userdata会发生什么?

我想知道如果我使用相同的键将lightuserdata推送到注册表中两次会发生什么。

我的代码:

MyData *x, *y; //假设这些是有效的指针

lua_pushstring(L, "my_data");
lua_pushlightuserdata(L, static_cast<void *>(x));
lua_settable(L, LUA_REGISTRYINDEX);

lua_pushstring(L, "my_data");
lua_pushlightuserdata(L, static_cast<void *>(y));
lua_settable(L, LUA_REGISTRYINDEX);

lua_pushstring(L, "my_data");
lua_gettable(L, LUA_REGISTRYINDEX);
MyData *data = static_cast<MyData *>(lua_touserdata(L, -1));

//数据将是x还是y?

之前推送的指针(x)会被新的指针(y)替换吗?

添加:是否有一种方法可以检查当前注册的键的列表?

点赞
用户107090
用户107090

Lua 注册表是一个普通的 Lua 表。你的代码相当于

registry.my_data = x
registry.my_data = y

因此,是的,在这两行之后,registry.my_data 的值是 y 的值。

2018-08-06 11:01:08