この場合&
はオブジェクトを取り、オブジェクトがまだ でないProc
場合は、Symbol の場合と同様に、そのオブジェクトで:hex
メソッドを呼び出そうとしto_proc
ます。Symbolのドキュメントには、to_proc
メソッドの実装の詳細が記載されています。
to_proc
指定されたメソッドに sym で応答する Proc オブジェクトを返します。
(1..3).collect(&:to_s) #=> ["1", "2", "3"]
あなたの場合&:hex
、シンボル:hex
を介して、と同等の Proc オブジェクトに変換されます{ |item| item.hex() }
Proc とは正確には何ですか? 基本的に、Proc クラスは基本的な無名関数です。Ruby では、呼び出し可能なオブジェクトの概念は、メッセージを送信できるオブジェクトを通じて Ruby に組み込まれていますcall
。この種の主な代表者はProc
とLambda
です。
Proc オブジェクトは自己完結型のコード シーケンスであり、メソッドの引数として作成、保存、渡し、ある時点で を介して実行できcall
ます。のようなメソッドmap
は、引数としてブロックを取ることもできます。これは、 を渡す場合です&:hex
。
map
一種の暗黙的な呼び出しのメソッド定義ではProc.new
、まったく同じブロックを使用して作成されます。次に、Proc オブジェクトによって具現化されたコードを実行する call メソッドを通じて、Proc が実行されます。