lua-users home
lua-l archive

Re: Possible to add methods in Lua to metatables defined in C?

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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?

On Thu, May 3, 2012 at 1:38 PM, liam mail <liam.list@googlemail.com> wrote:
On 3 May 2012 18:26, steve donovan <steve.j.donovan@gmail.com> wrote:
> On Thu, May 3, 2012 at 5:46 PM, Andrew Budd <andrew.budd@gmail.com> wrote:
>>  What I would like to do is add additional methods to those metatables from
>> Lua.
>
> Totally possible - it's a table, and you can add things to it.
>
>> mt = getmetatable(io.stdout)
>> mt.read2 = function(self) return self:read(),self:read() end
>

Unless it is specifically prevented using the "__metatable" key.[1]

Liam
[1] pedantic and just for completeness.



AltStyle によって変換されたページ (->オリジナル) /