Ruby对象作为方法的块参数

示例

将&(&)放在参数前会将其作为方法的块传递。对象将Proc使用to_proc方法转换为。

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

greet = Greeter.new

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

这是Ruby中的常见模式,许多标准类都提供了这种模式。

例如,Symbolsto_proc通过将自身发送给参数来实现:

# 示例实施
class Symbol
  def to_proc
   Proc.newdo |receiver|
     receiver.sendself
    end
  end
end

这启用了有用的&:symbol习惯用法,通常用于Enumerable对象:

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