2013-03-02 21 views
12

Sto usando inspect.lua per ispezionare la tabella in stringa.Come controllare i dati utente in lua

Ma, se il valore è un datiutente, restituisce solo <userdata 1>

ho davvero bisogno di sapere qual è il tipo di userdata è, qual è il valore userdata è, è molto importante per debuging, non voglio fare in qualsiasi IDE, voglio solo qualcosa può aiutarmi a eseguire il debug dal personale di stampa.

+5

L'unica informazione che è possibile ottenere è "getmetatable (someuserdata)". Che cosa vuoi esattamente ispezionare? – Eric

+1

grazie mille, ci sono qualcosa di molto utile, 'print (inspect (getmetabile (someuserdata)))' –

+0

dove "someuserdata" è cosa, esattamente ?. E il valore di ritorno di getmetatable è esattamente? Il manuale è inutile. – CashCow

risposta

7

Non è possibile.

Dal manual:

Il tipo di userdata è fornito per consentire dati C arbitrari da memorizzare nelle variabili Lua. Un valore userdata è un puntatore a un blocco di memoria non elaborata. [...] Userdata non ha operazioni predefinite in Lua, ad eccezione del test di assegnazione e identità.

Come indicato dal @Eric, l'unica cosa che si può fare da Lua è ispezionare il metatabella:

print(inspect(getmetatable(someuserdata))) 

Se si utilizza l'API C, si dovrebbe essere in grado di registrare una funzione personalizzata che stampa ciò che è contenuto nel blocco.

+1

e il test di identità è? – CashCow

+0

@CashCow: il test di identità è ==. Cioè, l'espressione (someuserdata == someuserdata) ritorna vera, nel mio test certamente limitato. Sembra che anche ~ = funzioni. – solublefish