我希望能够在Ruby中从匿名的lambda内部调用自身。考虑以下递归块(返回一个阶乘)。我知道我可以将其分配给一个变量,并且该变量在lambda的作用域内:
fac = lambda { |n| n == 1 ? 1 : n * fac.call(n - 1) }
fac.call(5)
但是,我想能够做到以下操作(目前还没有实际应用,我只是对进一步探索这门语言感兴趣):
(lambda { |n| n == 1 ? 1 : n * self.call(n - 1) }).call(5)
我知道那样做不起作用,因为self
是main
对象。我做错了吗?我试图做一些不可能的事情吗 - 如果不是,这是由于某些理论限制还是仅仅没有在Ruby中实现?