Quiero ser capaz de llamar a un lambda anónimo desde dentro usando Ruby. Considere el siguiente bloque recursivo (devuelve un factorial). Sé que puedo asignar a una variable, y esa variable está dentro del alcance de la lambda:¿Puedo hacer referencia a una lambda desde dentro usando Ruby?
fac = lambda { |n| n == 1 ? 1 : n * fac.call(n - 1) }
fac.call(5)
Pero, yo quiero ser capaz de hacer lo siguiente (por ninguna razón práctica hasta el momento, I' m simplemente interesados en explorar el lenguaje un poco más):
(lambda { |n| n == 1 ? 1 : n * self.call(n - 1) }).call(5)
sé que no va a funcionar, porque el objeto es self
main
. ¿Lo estoy haciendo mal? ¿Estoy tratando de hacer algo que no es posible? De lo contrario, ¿es por alguna restricción teórica o simplemente no se implementa en Ruby?
¿Está familiarizado con combinador Y? Puede que no sea la mejor solución práctica, pero desde el punto de vista teórico es muy interesante. Si no lo hace, eche un vistazo a [este artículo] (http://nex-3.com/posts/43-fun-with-the-y-combinator-in-ruby). Ten cuidado, podría volar tu cerebro. –