ruby Enumerable.Inject 方法是一个闭包还是一个块?

发布于 2024-11-05 15:54:13 字数 236 浏览 4 评论 0原文

我一直试图了解您是否需要在 Ruby 中的闭包之前创建 proc 或 lambda。

作为一个典型的例子,我们可以看一下注入方法。它使用了yield关键字,但它是一个闭包还是只是一个块?

def inject(init)
  result = init
  each do |item|
    result = yield(result, item)
  end
  result
end

I have been trying to understand if you need to create a proc or lambda before something is a closure in Ruby or not.

As a canonical example we can look at the inject method. It's using the yield keyword but is it a closure or just a block?

def inject(init)
  result = init
  each do |item|
    result = yield(result, item)
  end
  result
end

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

记忆之渊 2024-11-12 15:54:13

如果一段代码捕获了封闭范围(块就是这样做的),那么它就是一个闭包,因此块(以及 lambda 和 proc)是闭包。

然而,使用 def 定义的方法不会关闭任何内容,因此 inject 不是一个闭包。

A piece of code is a closure if it captures the enclosing scope, which a block does, so blocks (as well as lambdas and procs) are closures.

Methods defined using def however, don't close over anything, so inject is not a closure.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文