ruby
["a","b","c"].map(&:upcase) # => ["A", "B", "C"]
よくあるこれ → &:upcase
&について調べるとドキュメントにこうあった(抜粋)
&をProcオブジェクト付けて渡すとブロックとして渡される。
to_procメソッドをもつオブジェクトならば&を付けて渡すことができる。
とある。
そして
:update
これはSymbol(のように見える)オブジェクト。
明らかにProcオブジェクトではない。
そうなると、「to_procメソッドをもつオブジェクトならば&を付けて渡すことができる。」が適用される。
改めてSymbolクラスのドキュメントをみる。
Symbol#to_proc -> Proc
ありますね。そしてProcを返してますね。
という事は、
「&をProcオブジェクト付けて渡すとブロックとして渡される。」
にもあてはまりますね。
ここでmapのリファレンスを見てみる。
Enumerable#map {|item| ... }
mapが期待しているのはブロック。
おおー。辻褄が合う。