LoginSignup
2

More than 5 years have passed since last update.

よく見る「&:upcase」を整理した

Posted at
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が期待しているのはブロック。

おおー。辻褄が合う。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2