如果我使用同一个密钥两次推送用户数据会怎样?

What happens if I push userdata twice using the same key?

我想知道如果我使用同一个密钥将 lightuserdata 推入注册表两次会发生什么。

我的代码:

MyData *x, *y; //let's say these are valid pointers

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));

//would the data be x or y?

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

已添加: 有没有办法检查当前注册的密钥列表?

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

registry.my_data = x
registry.my_data = y

所以,是的,在这两行之后 registry.my_data 的值就是 y 的值。