Если вы договорились, что каждый из ваших userdata
определенного типа будет использовать метатаблицу, вы можете использовать luaL_checkudata для подтверждения их типа.Обычно это то, как библиотека тегирует и идентифицирует данные, которые она создает.
Вот некоторые функции, которые создают и проверяют пользовательские данные, используя эту технику:
static decContext *ldn_check_context (lua_State *L, int index)
{
decContext *dc = (decContext *)luaL_checkudata (L, index, dn_context_meta);
if (dc == NULL) luaL_argerror (L, index, "decNumber bad context");
return dc; /* leaves context on Lua stack */
}
static decContext *ldn_make_context (lua_State *L)
{
decContext *dc = (decContext *)lua_newuserdata(L, sizeof(decContext));
luaL_getmetatable (L, dn_context_meta);
lua_setmetatable (L, -2); /* set metatable */
return dc; /* leaves context on Lua stack */
}
Метатабельный объект был создан с помощью
const char *dn_context_meta = "decNumber_CoNTeXT_MeTA";
luaL_newmetatable (L, dn_context_meta);