Ruby Proc return
def func(array, &block)
array.each do |ele|
block.call(ele)
end
end
fruits = ["banana", "apple", "pear", "peach"]
func(fruits) do |f|
break if f == "pear"
puts "I like" + f.capitalize
end
处理水果数组, 遇到 pear 就终止, 用 break
; 遇到 pear 就跳过, 用 next .
这里一定不能用的是 return
, 会报 LocalJumpError
.
解释
定义 func 的时候, 参数中的 &block
表明, 在 func 内, block 将被当做 Proc 对象使用.
proc 中的return, 从定义 proc 的作用域中返回, 也就是例子中的顶层作用域. 在顶层return就会报错.
lambda 的行为更像是方法, return 就是从本 lambda 返回.