|
Ahh ok that works. Is there any way to do that other than calling a method that would return something with the appropriate metatable? Could I stuff a reference to the metatable (what is coming back from getmetatable) into the global variable space from C when the lib is loaded?
On Thu, May 3, 2012 at 1:49 PM, joao lobato <btnfdp.lobato@gmail.com> wrote:On 5/3/12, Andrew Budd <andrew.budd@gmail.com> wrote:You are missing the fact that "LuaBook.array" is only a unique key to
> That's how I thought it should work, so if for the sake of an example I
> have something like this:
>
>
> int luaopen_array (lua_State *L) {
> luaL_newmetatable(L, "LuaBook.array");
>
> lua_pushstring(L, "__index");
> lua_pushvalue(L, -2); /* pushes the metatable */
> lua_settable(L, -3); /* metatable.__index = metatable */
>
> luaL_openlib(L, NULL, arraylib_m, 0);
>
> luaL_openlib(L, "array", arraylib_f, 0);
> return 1;
> }
>
>
> (from online reference here: http://www.lua.org/pil/28.3.html)
>
> how would I add a method on the lua side?
>
> getmetatable(LuaBook.array) throws a attempt to index global 'LuaBook'
> (a nil value)
>
> what am I missing?
>
the Registry.
Following that example, I believe what you want is:
mt = getmetatable(array.new(0))
that is, you want to get the metatable shared by all instances of the type.