物件作為方法的塊引數
將 &(&符號)放在引數前面會將其作為方法的塊傳遞。使用 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]