我發現,實現自定義符號#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