この場合&はオブジェクトを取り、オブジェクトがまだ でない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 が実行されます。