重複の可能性あり:
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_proc
to_proc
Symbol