找不到支持我的数据,但这是我的 0.02:闭包必须仅从自身返回,而不是从父调用者返回。父调用者的返回与 ruby 的 blocks(1) 中使用的概念相同:两个块(被调用者和调用者)的控制/范围是相同的,而闭包应该是独立的。
scala 的实现方式是一种在 groovy 中实现的语法糖:通过抛出异常从闭包“返回”。
要从 groovy 中的闭包中“返回”,请坚持使用find
,findAll
或findResult
(根据@jesseplymale 的回答):这些正在迭代正确的元素。
...
我不是 javascript 的专家,但他似乎同意我的观点:
// prints every item; the return is only from the function
[1, 2, 3, 4, 5].forEach( function(item) {
console.log(item);
return item;
})
Ruby,带有块和 lambda:
# block: prints "1" and stop iterating
def a()
[1, 2, 3, 4, 5].each { |it|
puts it
return it
}
end
a()
传递一个块和一个 lambda 作为参数:
# this method receives a block/lambda and passes
# it to the 'each' method from list
def b(block)
[1, 2, 3, 4, 5].each &block
end
# this block fails with "unexpected return (LocalJumpError)"
#b(Proc.new { |it| puts it; return it; })
# this lambda keeps iterating and printing, even though
# it has the return statement
b(lambda { |it|
puts it
return it
})
(1):请注意,我不是 Ruby 的专家,这可能或多或少是错误的。