2012-04-16 5 views
9

non ero molto sicuro di come titolo la questione, ma considerare il seguente codice di lua:Valutare blocco di codice in un parametro di funzione in lua

print(function() 
    s = "" 
    for i = 1, 10 do 
     s = s..tostring(i) 
    end 
    return s 
    end) 

Ma questa stampa solo la funzione di indirizzo, dal momento che la funzione() restituisce una chiusura. C'è un modo per valutare la funzione anonima? Come in uno schema in cui posso abbracciare il lambda in parentesi aggiuntive?

((lambda()(display "Hello World"))) 

Certo che lo so, potrei definire la funzione in anticipo e lo chiamo più tardi, ma ero solo curioso di sapere se questo è possibile in lua. Grazie in anticipo per tutte le risposte.

risposta

14

È necessario racchiudere la definizione della funzione tra parentesi e quindi chiamarla aggiungendo () dopo. Mettendo questo nell'interprete Lua:

> print((function() 
    s="" 
    for i=1,10 do 
     s=s..tostring(i) 
    end 
    return s 
    end)()) 

ha pronunciato la seguente uscita

> 12345678910 
+0

grazie, ho avuto un'idea simile ma non ho avvolto la funzione tra parentesi. sembra un po 'più brutto dello schema, ma almeno funziona: D – Moe

4

Se questo è un comportamento globale che si desidera, la soluzione più semplice sarebbe quella di agganciare stampa in modo che valuta tutte le funzioni passati a esso. In questo modo puoi semplicemente lasciare i siti di chiamata come lambda.

+0

possibilità interessante, stavo solo imparando lua, e non sapevo che avresti potuto farlo. lo terrò a mente – Moe