1. ホーム
  2. ruby

[解決済み] Rubyのアンパサンドコロンのショートカット [重複] [重複

2022-03-17 07:34:49

質問

<ブロッククオート

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

Rubyでは、やればわかるんです。

some_objects.each(&:foo)

と同じです。

some_objects.each { |obj| obj.foo }

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

解決するには?

あなたの質問は、いわば間違いです。ここで起こっているのは、"アンパサンドとコロン"ではなく、"アンパサンドとオブジェクト"なんです。この場合のコロンは、記号を表すものです。つまり、次のようになります。 & であり :foo .

& が呼び出す to_proc を生成し、それをブロックとしてメソッドに渡します。Rubyでは to_proc が実装されているのは Symbol ということで、この2つの呼び出しは等価である。

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

では、まとめます。 & コール to_proc を実装し、それをブロックとしてメソッドに渡しています。 to_proc の上に Symbol .