gpt4 book ai didi

c - Lua中为什么使用索引方法而不是特殊方法

转载 作者:行者123 更新时间:2023-11-30 15:53:13 24 4
gpt4 key购买 nike

lua_State*  m_state;
luaL_newmetatable(m_state,LUA_DATACLIENT);

lua_pushcfunction(m_state,DataClient_Index);
lua_setfield(m_state,-2,"__index");

lua_pushcfunction(m_state,DataClient_newIndex);
lua_setfield(m_state,-2,"__newindex");

lua_pushcfunction(m_state,DataClient_RequestData);
lua_setfield(m_state,-2,"RequestData");

lua_pushcfunction(m_state,DataClient_free);
lua_setfield(m_state,-2,"__gc");
lua_pop(m_state,1);

我想导出一些C函数到Lua,但是函数DataClient_Index当我调用 RequestData 时被调用在Lua中,为什么使用索引方法而不是Lua中的特殊方法?

最佳答案

执行索引操作时,Lua 默认情况下不会在元表中查找。

  • 对于__index元方法仅在表中不存在索引时触发。
  • 对于用户数据__index总是被调用,因为不可能在用户数据中存储键值。

对于用户数据对象,习惯上将方法放置在元表中。但是,要使其正常工作,__index 元表字段应该是元表本身,或者是尝试在元表内查找索引的函数。

如果您选择第一个解决方案(最简单的),您可以编写如下内容:

lua_State*  m_state;
luaL_newmetatable(m_state,LUA_DATACLIENT);

lua_pushvalue(m_state, -1); // push the metatable
lua_setfield(m_state,-2,"__index"); // __index points to the metatable itself

// ...

关于c - Lua中为什么使用索引方法而不是特殊方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13816518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com