Я хотел бы знать, что произойдет, если я вставлю 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. Ваш код эквивалентен
registry.my_data = x
registry.my_data = y
Итак, да, после этих двух строк значение registry.my_data
это значение y
,
Других решений пока нет …