Putting a &
(ampersand) in front of an argument will pass it as the method's block. Objects will be converted to a Proc
using the to_proc
method.
class Greeter
def to_proc
Proc.new do |item|
puts "Hello, #{item}"
end
end
end
greet = Greeter.new
%w(world life).each(&greet)
This is a common pattern in Ruby and many standard classes provide it.
For example, Symbol
s implement to_proc
by sending themselves to the argument:
# Example implementation
class Symbol
def to_proc
Proc.new do |receiver|
receiver.send self
end
end
end
This enables the useful &:symbol
idiom, commonly used with Enumerable
objects:
letter_counts = %w(just some words).map(&:length) # [4, 4, 5]