metatables

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

metatables

Denis Dos Santos Silva
é possivél listar todas as metatables, se sim, como ?

[...] -- .c
 luaL_newmetatable(L, "PREFIXO:NOME");

[...] -- .lua
como listar e/ou verificar sua existência ?

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em http://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: metatables

Ignacio Burgueño-2
Acho que apenas aquelas metatables criadas com luaL_newmetatable podem ser listadas, porque elas ficam na registry.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em http://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: metatables

Roberto Ierusalimschy
> Acho que apenas aquelas metatables criadas com luaL_newmetatable podem ser
> listadas, porque elas ficam na registry.
>
> http://www.lua.org/pil/28.2.html

Mesmo assim, não há como saber se um item no registry é uma metatable ou
não. (Pode-se usar heurísticas, como verficar que o valor é uma tabela
e seu campo __name contém a chave.)

Para consultar (ao invés de listar) é fácil, via biblioteca de debug:

  print(debug.getregistry()["PREFIXO:NOME"])

-- Roberto

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Visite este grupo em http://groups.google.com/group/lua-br.
Para obter mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: metatables

Luiz Henrique de Figueiredo
In reply to this post by Ignacio Burgueño-2
> Acho que apenas aquelas metatables criadas com luaL_newmetatable podem ser
> listadas, porque elas ficam na registry.

Exato!

Para listar as metatables criadas com luaL_newmetatable, use isso em Lua:

        for k,v in pairs(debug.getregistry()) do print(k,v) end

mas no registry tem mais coisas do que as metatables: ignore os índices
numéricos e as chaves começadas com underscore.

Para simplesmente testar se há uma metatable em C use luaL_getmetatable.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Visite este grupo em http://groups.google.com/group/lua-br.
Para obter mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: metatables

Denis Dos Santos Silva
In reply to this post by Denis Dos Santos Silva
muito obrigado, foi BEM esclarecedor.




Em domingo, 20 de setembro de 2015 23:05:40 UTC-3, Denis Dos Santos Silva escreveu:
é possivél listar todas as metatables, se sim, como ?

[...] -- .c
 luaL_newmetatable(L, "PREFIXO:NOME");

[...] -- .lua
como listar e/ou verificar sua existência ?

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em http://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.