物件作為方法的塊引數

&(&符號)放在引數前面會將其作為方法的塊傳遞。使用 to_proc 方法將物件轉換為 Proc

class Greeter
  def to_proc
    Proc.new do |item|
      puts "Hello, #{item}"
    end
  end
end

greet = Greeter.new

%w(world life).each(&greet)

這是 Ruby 中的常見模式,許多標準類都提供它。

例如, Symbol 通過傳送自己的引數來實現 to_proc

# Example implementation
class Symbol
  def to_proc
    Proc.new do |receiver|
      receiver.send self
    end
  end
end

這使得有用的 &:symbol 成語,通常與 Enumerable 物件一起使用:

letter_counts = %w(just some words).map(&:length)  # [4, 4, 5]