2012-02-24 6 views
25

可能性の重複:
What does map(&:name) mean in Ruby?ルビの "&:"演算子の機能は何ですか?

私は&:オペレータの機能を知りません以下

a.each_slice(2).map(&:reverse) 

を持っていたコードスニペットに出くわしました。それはどのように機能するのですか?

+0

これはすでに求められてとStackOverflowの上ここに答えてきた無未満17の他の質問の重複です:[理解\ [ClassOne Rubyで 'map(&:name)'とは何ですか?(http://())。 Ruby/Ruby on Railsのアンパサンドコロンのショートカット(http://StackOverflow.Com/q/1792683/)[http://StackOverflow.Com/q/1217088/] ://StackOverflow.Com/q/1961030/)、[Ruby: '&:symbol;構文](http://StackOverflow.Com/q/2096975/)、... –

+0

... [Rubyの '&:last'とは何ですか?](http://StackOverflow.Com/q/2211751/)、[Rubyでは'&: '演算子とは何ですか?](http: /StackOverflow.Com/q/2259775/)、[このRubyコードで 'map(&:name)'とは何ですか?](http://StackOverflow.Com/q/2388337/)、[何ですか? Rubyでは 'Post.published.collect(&:views_count)'の ''&:views_count'](http://)を参照してください。 Ruby Procの構文(http://StackOverflow.Com/q/4512587/)、["(1..4).inject(&:+)" Rubyでの作業(http://StackOverflow.Com/q/5003257/)、... –

+0

... [次のステートメント '&:property'?](http://StackOverflow.Com/q/5620411/)、[次のルビ構文では '&'の意味は何ですか?](http://StackOverflow.Com/q/5952175/)[なぜルビのプロパティで単項演算子を使うのですか? '' Array#map''はこのようなことをするためのパラメータをどのように持っていますか?](http://StackOverflow.Com/q/6289084/) 6716629 /)、そして[ルビの中では '&:'は何を意味するのか、それはシンボルと混じったブロックですか?](http://StackOverflow.Com/q/9188362/)。 –

答えて

60

Rubyには&:演算子がありません。あなたが見ているのは、に適用された&オペレータです。メソッドの引数リストで

&オペレータは、そのオペランドをとり、それが(その上にto_procを呼び出すことによって)既にではなく、ブロックが使用されたかのようにメソッドに渡した場合、Procオブジェクトに変換します。

my_proc = Proc.new { puts "foo" } 

my_method_call(&my_proc) # is identical to: 
my_method_call { puts "foo" } 

そこで問題は今になり、それがthe Rails documentationで見るのは簡単だ「Symbol#to_procは何をしますか?」:

列挙するのに特に有用である簡単なprocの、にシンボルをオンにします。例:あなたは、この関数に渡すオブジェクトにそのシンボルの名前でメソッドを呼び出しますラムダ関数を作成しているシンボルに&を付加することで

# The same as people.collect { |p| p.name } 
people.collect(&:name) 

# The same as people.select { |p| p.manager? }.collect { |p| p.salary } 
people.select(&:manager?).collect(&:salary) 
+3

あなたはそれを暗示していますが、明らかに明示する方が良いでしょう。これはRailsが行う変更であり、Ruby自体には組み込まれていません。 – kikito

+5

@kikito:http://ruby-doc.org/core-1.9.3/Symbol.html#method-i-to_proc – tokland

+0

あなたは正しいです - 私は単なるirb(1.8.7)で試しました。 Ruby自体で。これはRailsでは提供されていません。私のエラーを修正してくれてありがとう! – kikito

18

。アカウントにそのを取る:

ar.map(&:reverse) 

することとほぼ同等です:

ar.map { |element| element.reverse } 
+2

です。重複した質問には答えないでください。ただ投票に投票してください。この質問はすでに尋ねられ、17(回)回答されましたが、知識をさらに広げて得られたものは何もありません。 –

+10

私は質問を見て、私はそれに答えました。それ以降は重複としてマークされました。 –

関連する問題