2013-10-15 6 views
5

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

+1

Uno dei modi in movimento/copia Lua oggetti tra diversi 'Lua States' su diversi thread: http://stackoverflow.com/a/9573063/1150918 – Kamiccolo

+1

Ho digitato il codice * LuaLanes * e vedo il codice che sta eseguendo una copia da uno stato a un altro. Grazie. – vyom

risposta

5

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)); 
+2

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

+0

L'intento del controllo api è cristallino, 'from' dovrebbe essere uguale a' to'. – doug65536

+1

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

Problemi correlati