我希望能夠使用Ruby從本身內部調用匿名lambda。考慮下面的遞歸塊(返回一個階乘)。我知道我可以把它分配給一個變量,該變量是拉姆達的範圍內:我可以使用Ruby從本身內部引用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組合?這可能不是最好的實際解決方案,但從理論角度來看,這非常有趣。如果你不這樣做,請看[這篇文章](http://nex-3.com/posts/43-fun-with-the-y-combinator-in-ruby)。小心點,它可能會讓你的大腦流失。 – 2012-03-01 12:56:21