我正在学习如何将C++对象绑定到Lua上,并且从Programming Gems 6(Chapter 4.2)这本书中进行了类型检查。对于类型检查用户数据/串对被存储在一个环境表,用代码给出如何做到这一点:为什么在添加到Lua中的表时推送重复密钥?
void Binder::pushusertype(void* udata, const char* tname) {
lua_pushlightuserdata(L, udata); // push address
lua_pushvalue(L, -1); // duplicate address
lua_pushstring(L, tname); // push type name
lua_rawset(L, LUA_ENVIRONMENTINDEX); // envtable[address] = tname
}
在粘合剂类有一个lua国家作为一个属性,名为“L”
正如你所看到的地址被推两次。由于这段代码只是作为一个例子给出,它似乎并没有被推入堆栈的重复地址可以用于这个函数之外的任何目的,这使我相信它有一个特定的原因。所以我的问题是,为什么会这样做?