In base al manuale 5.1 lua, lua_xmove
sposta i valori tra pile di fili diversi appartenenti allo stesso stato Lua. Ma, mi è capitato casualmente di usarlo per spostare valori attraverso diversi stati Lua e sembrava funzionare bene! Esistono altre API per spostare valori da uno stato Lua a un altro (in 5.1) oppure è possibile utilizzare lua_xmove
?lua_xmove tra diversi stati lua
risposta
Lua memorizza i dati di raccolta dati obsoleti nello stato globale. Quindi, se sposti GC o oggetti stringa negli stati, puoi potenzialmente confondere il garbage collector e creare riferimenti ciondolanti.
Quindi, mentre potrebbe sembrare che funzioni, potrebbe facilmente causare problemi in seguito.
Per riferimento, vedere this mailing list thread dove gli sviluppatori discutono di questo problema esatto.
Nota che lua_xmove
vuol controllare che gli stati globali sono gli stessi:
api_check(from, G(from) == G(to));
Si noti che 'api_check' cambia comportamento in base alle opzioni di compilazione. Vedere il capitolo 3 del manuale (cap. 4 in 5.2) e luaconf.h. Credo che i normali build di rilascio di Lua non abilitino i controlli API. – RBerteig
L'intento del controllo api è cristallino, 'from' dovrebbe essere uguale a' to'. – doug65536
Cosa? No, 'from' non dovrebbe essere uguale a' to', che risulterebbe in un no-op. Ciò che è vero è che lo stato globale (quello che risulta da una chiamata a 'lua_newstate()' nell'albero di stato deve essere lo stesso per entrambi gli argomenti. In altre parole, sia 'to' che' from' derivano da un (eventualmente vuota) catena di 'lua_newthread()' chiama root su alcuni stati iniziali 'L'. – BadZen
Uno dei modi in movimento/copia Lua oggetti tra diversi 'Lua States' su diversi thread: http://stackoverflow.com/a/9573063/1150918 – Kamiccolo
Ho digitato il codice * LuaLanes * e vedo il codice che sta eseguendo una copia da uno stato a un altro. Grazie. – vyom