Ruby 有4种闭包类型,blocks、procs、lambdas 和 method objects。

Ruby 处理闭包有两种形态:一是 snippets 型,包括 blocks 和 procs,其中 blocks 只是书写简化但受到一些限制的 procs;二是 methods 型,包括 lambdas 和 method objects,前者匿名后者具名。

# 示例1
class Array
  def iterate!
    self.each_with_index do |n, i|
      self[i] = yield(n)
    end
  end
end

[1, 2, 3, 4].iterate! { |n| n ** 2 }
=> [1, 4, 9, 16]
……

阅读全文