ruby Enumerable.Inject 方法是一个闭包还是一个块?
我一直试图了解您是否需要在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果一段代码捕获了封闭范围(块就是这样做的),那么它就是一个闭包,因此块(以及 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, soinject
is not a closure.