我可以使用Ruby从内部引用lambda吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我希望能够使用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对象。

提问于
用户回答回答于

可以通过callee来检查它

lambda{ __callee__ }.call #=> nil

没有参考你就不能调用这个函数。我可以向你提出一个变体:

(fac = lambda{ |n| n==1 ? 1 : n*fac.call(n-1) }).call(5)
用户回答回答于

lambda仍然是匿名的,但它有一个引用。

(l = lambda { l.call }).call

扫码关注云+社区