3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Symbol#&

Last updated at Posted at 2016-08-09

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

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 を作ることができるようになります。いつ使うんだろう。

以上です。おわります。

3
2
0

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?