J'apprends comment lier des objets C++ à Lua avec la vérification de type du livre Programming Gems 6 (Chapitre 4.2). Pour le type de vérification les paires userdata/chaîne sont stockées dans une table de l'environnement, avec le code donné comment faire:Pourquoi appuyer sur une touche en double lors de l'ajout à une table dans 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
}
Lorsque la classe Binder a un État Lua comme un attribut, nommé « L »
Comme vous pouvez le voir l'adresse est poussée deux fois. Comme ce petit morceau de code n'est donné qu'à titre d'exemple, il ne semble pas qu'une adresse dupliquée poussée sur la pile puisse servir à quelque chose en dehors de cette fonction, ce qui me porte à croire qu'il y a une raison spécifique à cela. Alors ma question est, pourquoi ferait-on cela?