2014-12-23 16 views
5

Lua principiante qui, cercando di imparare facendo ... Questo è il mio quarto giorno con Lua, quindi per favore nuda con me.Lua esegue qualcosa memorizzato nelle tabelle valore chiave

Voglio creare una tabella con nomi specifici come chiavi e funzioni specifiche come valori. I nomi delle chiavi rappresentano comandi che un utente inserisce e se esiste una chiave con quel nome, allora il programma dovrebbe eseguire il codice memorizzato in quel valore di chiavi.

Così, per esempio, facciamo un tavolo con i tasti e funzioni all'interno il valore della chiave:

local t = { 
    ["exit"] = quitGame, 
    ..., 
    ... 
} 

e abbiamo anche una funzione, ad esempio:

function quitGame() 
    print("bye bye") 
    os.exit() 
end 

così ora che facciamo:

userInput = io.read() 

for i,v in pairs(t) do 
    if userInput == i then 
     --now here, how do I actually run the code that is stored in that key value (v)? 
    end 
end 

Spero che tu capisca cosa sto cercando di fare.

risposta

3

Si dispone di una tabella convertita per valore. Non è necessario eseguire il ciclo per trovare la chiave che si desidera. Basta guardare direttamente. Quindi chiama il valore che ottieni.

local fun = t[userInput] 
if fun then 
    fun() 
end 
+0

Questo è esattamente ciò di cui avevo bisogno. Grazie! Ancora una domanda, come faccio a interrompere la chiusura del programma quando viene chiamata una funzione dalla tabella? Ad esempio, se desidero che la funzione stampi qualcosa e quindi attendi di nuovo per il successivo inserimento dell'utente? – thee

+0

@thee In ultima analisi ciò dipende dal proprio ambiente, ma in un file standalone (ad esempio) un ciclo come 'while true do userInput = io.read() ... done' funzionerà. –

Problemi correlati