[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: _call me, please
- From: "Mauro Iazzi" <mauro.iazzi@...>
- Date: Thu, 20 Mar 2008 21:47:11 +0100
Call lua_setmetatable and everything should work.
On 20/03/2008, Foreman, Bill <billf@akelainc.com> wrote:
>
>
>
>
> Need help,
>
>
>
> I have a built-in module for complex numbers defined as follows:
>
>
>
> int complex_number_new(lua_State* L)
>
> {
>
> // make a complex number and put it on the stack
>
> return 1;
>
> }
>
>
>
>
>
> static const struct luaL_Reg s_complex_f[] =
>
> {
>
> // constructor
>
> { "new", complex_number_new },
>
>
>
> // many more functions …
>
> { 0, 0 }
>
> };
>
>
>
>
>
> static const struct luaL_Reg s_complex_m[] =
>
> {
>
> { "__call", complex_number_new },
>
>
>
> // many more operators …
>
> { 0, 0 }
>
> };
>
>
>
>
>
> int luaopen_complex_number(lua_State* L)
>
> {
>
> //
>
> luaL_newmetatable(L, "ak_complex");
>
>
>
> //
>
> luaL_register(L, 0, s_complex_m);
>
> luaL_register(L, "complex", s_complex_f);
>
>
>
> return 1;
>
> }
>
>
>
>
>
> Question: Why do I get the error "attempt to call global 'complex' (a table
> value)" when I attempt x = complex (1, 2), which should return the same
> thing as complex.new(1, 2)?
>
>
>
> I see this question in the forum, but I (for the life of me) don't
> understand the responses. What is special about __call, and why isn't it
> better documented? I am so thick that it is going to take a concrete
> example in c or c++ to breach the wall.
>
>
>
> What does work is
>
> setmetatable(complex, { __call = function( _, ... ) return complex.new( ...
> ) end })
>
>
>
> but I want to do this internally, not in Lua.
>
>
>
> --BillF