Ruby

Symbol#&

More than 1 year has passed since last update.

前にこういう話をしました。

Symbol からレシーバを後挿しできる Proc を得られるようにするとブロックなし Ruby が捗る

p [[1,2,3],[2,4,6],[5,7,9]].map(&:select.(&:odd?))

こういうふうに書けるようになるやつは、たぶんこれを追加するともっと楽しいです。

class Symbol

def &(callable)
call(&callable)
end
end

p [[1,2,3],[2,4,6],[5,7,9]].map(&:select&:odd?)

たのしいですね。

受け取るのはブロックにすることが可能なものならなんでもいいので Proc を渡してもよいです。たとえば任意のブロックを受け取るメソッドで

:instance_exec&proc

というイディオムを使うことで、後挿したレシーバのコンテキストで実行される Proc を作ることができるようになります。いつ使うんだろう。

以上です。おわります。