我发现,实现自定义符号#to_proc在Ruby中此示例代码:为什么Symbol#to_proc具有这种类型的行为?
class Symbol
def to_proc
puts "In the new Symbol#to_proc!"
Proc.new { |obj| obj.send(self) }
end
end
它包括额外的“放......”字符串,以确保它没有内置的方法。当我执行的代码
p %w{ david black }.map(&:capitalize)
结果是:
In the new Symbol#to_proc!
["David", "Black"]
但它为什么不这样呢?
In the new Symbol#to_proc!
["David"]
In the new Symbol#to_proc!
["Black"]
我的逻辑是这样的:map将元素一个接一个阻塞。块取第一个元素并执行.to_proc,而不是第二个。但为什么只执行一次?
@bjhaid:这不是该答案的重复。完全一样。 –
@bjhaid:恩,是的,我要继续前进,不同意你在这里。 –
http://stackoverflow.com/questions/1961030/ruby-ampersand-colon-shortcut – andHapp