I want to be able to call an anonymous lambda from within itself using Ruby. Consider the following recursive block (returns a factorial). I know I can assign it to a variable, and that variable is within the scope of the lambda:
fac = lambda { |n| n == 1 ? 1 : n * fac.call(n - 1) }
fac.call(5)
But, I want to be able to do the following (for no practical reason as of yet, I'm just interested in exploring the language some more):
(lambda { |n| n == 1 ? 1 : n * self.call(n - 1) }).call(5)
I know that won't work, because self
is the main
object. Am I doing it wrong? Am I trying to do something that's not possible -- and if not, is this because of some theoretical restriction or is it simply not implemented in Ruby?