What does to_proc method mean in Ruby?

block, proc, ruby, symbols, syntax

Solution

Some methods take a block, and this pattern frequently appears for a block:

{|x| x.foo}

and people would like to write that in a more concise way. In order to do that they use a combination of: a symbol, the method `Symbol#to_proc`, implicit class casting, and `&` operator. If you put `&` in front of a `Proc` instance in the argument position, that will be interpreted as a block. If you combine something other than a `Proc` instance with `&`, then implicit class casting will try to convert that to a `Proc` instance using `to_proc` method defined on that object if there is any. In case of a `Symbol` instance, `to_proc` works in this way:

:foo.to_proc # => ->x{x.foo}

For example, suppose you write:

bar(&:foo)

The `&` operator is combined with `:foo`, which is not a `Proc` instance, so implicit class cast applies `Symbol#to_proc` to it, which gives `->x{x.foo}`. The `&` now applies to this and is interpreted as a block, which gives:

bar{|x| x.foo}

Problem

I am learning rails and following this thread. I am stuck with the `to_proc` method. I consider symbols only as alternatives to strings (they are like strings but cheaper in terms of memory). If there is anything else I am missing for symbols, then please tell me. Please explain in a simple way what `to_proc` means and what it is used for.

Original source

Related problems