Rubyのアンパサンドとコロンのショートカット [重複] 質問する

Rubyのアンパサンドとコロンのショートカット [重複] 質問する

重複の可能性あり:
Ruby で map(&:name) はどういう意味ですか?

Ruby では、次のようにするとわかります。

some_objects.each(&:foo)

それは同じです

some_objects.each { |obj| obj.foo }

つまり、&:fooブロックを作成し{ |obj| obj.foo }、それを Proc に変換して、それぞれに渡します。なぜこれが機能するのでしょうか? これは単に Ruby の特殊なケースなのでしょうか、それともこのように機能するのには何か理由があるのでしょうか?

ベストアンサー1

いわば、あなたの質問は間違っています。ここで起こっているのは「アンパサンドとコロン」ではなく、「アンパサンドとオブジェクト」です。この場合のコロンはシンボルを表します。つまり、 と があり&ます:foo

&はオブジェクトを呼び出し、to_procそれをブロックとして メソッドに渡します。Ruby では、to_procは に実装されているSymbolため、次の 2 つの呼び出しは同等です。

something {|i| i.foo }
something(&:foo)

まとめると、オブジェクトを&呼び出し、それをブロックとしてメソッドに渡し、Ruby はを実装します。to_procto_procSymbol

おすすめ記事