【发布时间】:2012-03-19 22:31:59
【问题描述】:
我希望能够使用 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 中实现?
【问题讨论】:
-
你熟悉 Y 组合器吗?这可能不是最好的实际解决方案,但从理论的角度来看,它非常有趣。如果您不这样做,请查看this article。小心,它可能会炸毁你的大脑。