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