【发布时间】:2010-07-23 02:28:58
【问题描述】:
我正在学习如何使用 Programming Gems 6(第 4.2 章)一书中的类型检查将 C++ 对象绑定到 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
}
Binder 类有一个 Lua State 作为属性,命名为“L”
如您所见,地址被推送了两次。由于这一小段代码仅作为示例给出,因此推送到堆栈上的重复地址似乎不会用于此函数之外的任何目的,这让我相信这是有特定原因的。所以我的问题是,为什么要这样做?
【问题讨论】: