Question
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.
Answer
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}