[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Problem with userdata (metatable)
- From: "Anders Bergh" <anders@...>
- Date: Wed, 12 Apr 2006 15:25:04 +0200
Hi!
I'm using Lua 5.1 and I've been trying to add my own userdata type. It
works except I couldn't get methods working. I've been reading the
chapter in the first edition of pil and
http://lua-users.org/wiki/UserDataWithPointerExample.
Here's the code I use:
static const luaL_reg llua_user_f[] = {
/* Functions */
{"FindByNick", llua_user_FindByNick},
/* Methods */
{"GetNick", llua_user_GetNick},
{NULL, NULL}
};
/* Metatable */
static const luaL_reg llua_user_m[] = {
{"__tostring", llua_user_tostring},
{NULL, NULL}
};
int lluaopen_user (lua_State *L) {
luaL_openlib(L, "user", llua_user_f, 0);
luaL_newmetatable(L, TYPE);
luaL_openlib(L, 0, llua_user_m, 0); /* mt */
lua_pushliteral(L, "__index");
lua_pushvalue(L, -3);
lua_rawset(L, -3);
lua_pushliteral(L, "__metatable");
lua_pushvalue(L, -3);
lua_rawset(L, -3);
lua_pop(L, 1);
return 1;
}
When I use "user:GetNick()" in Lua, I get the error: attempt to index
field '?' (a nil value).
getmetatable(user) returns nil, tostring(user) returns "user:
0x815598c". What exactly am I doing wrong?
Anders