对象作为方法的块参数
将 &
(&符号)放在参数前面会将其作为方法的块传递。使用 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]