2012-04-16 8 views
9

no estaba muy seguro de cómo título de la pregunta, pero considerar el siguiente código lua:Evaluar bloque de código en función de un parámetro en lua

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

Pero esta imprime sólo la dirección de la función, ya que la función() devuelve un cierre. ¿Hay alguna forma de evaluar la función anónima? Al igual que en el esquema donde puedo abrazar a la lambda en corchetes adicionales?

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

Por supuesto que sé, podría definir la función de antemano y lo llamo más tarde, pero estaba ansioso por ver si esto es posible en Lua. Gracias de antemano por todas las respuestas.

Respuesta

14

Debe ajustar la definición de la función entre paréntesis y luego llamarla agregando () después. Poner esto en el intérprete de Lua:

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

da el siguiente resultado

> 12345678910 
+0

gracias, tuve una idea similar pero no he ajustado la función entre corchetes. se ve un poco más feo que el esquema, pero al menos funciona: D – Moe

4

Si esto es un comportamiento global que desea, la solución más sencilla sería la de conectar de impresión para que evalúa las funciones pasaron a eso. De esa manera, simplemente puede dejar los sitios de llamadas como lambdas.

+0

posibilidad de interesar, yo solo estaba aprendiendo lua, y no sabía que podías hacer eso. lo tendré en cuenta – Moe

Cuestiones relacionadas