Ruby Language Objets en tant qu'arguments de bloc aux méthodes


Exemple

Mettre un & (esperluette) devant un argument le transmettra comme bloc de la méthode. Les objets seront convertis en un Proc utilisant la méthode to_proc .

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

greet = Greeter.new

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

Ceci est un modèle courant dans Ruby et de nombreuses classes standard le fournissent.

Par exemple, Symbol implémente to_proc en s'envoyant à l'argument:

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

Cela active l'idiome utile &:symbol , couramment utilisé avec les objets Enumerable :

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