可能性の重複:?
What does map(&:name) mean in Ruby?Post.all.map(&:id)は何を意味していますか?
Post.all.map(&:id)
は
=> [1, 2, 3, 4, 5, 6, 7, ................]
map(&:id)
はどういう意味を返しますか。特に&
。
可能性の重複:?
What does map(&:name) mean in Ruby?Post.all.map(&:id)は何を意味していますか?
Post.all.map(&:id)
は
=> [1, 2, 3, 4, 5, 6, 7, ................]
map(&:id)
はどういう意味を返しますか。特に&
。
&
シンボルは、次の引数がメソッドに与えられたブロックとして扱われるべきであることを示すために使用されます。つまり、まだProcオブジェクトでない場合は、to_proc
メソッドが呼び出されて1つに変換されます。
はこのように、今度は
Post.all.map { |x| x.id }
と同等です
Post.all.map(&:id.to_proc)
のようなもので、あなたの例の結果は、だから、Post.all
によって返されたコレクションを反復処理し、結果を配列で構築しますすべての項目に対してid
メソッドが呼び出されました。
これは、Symbol#to_proc
がオブジェクトを取得し、そのオブジェクトのシンボル名を持つメソッドを呼び出すProcを作成するためです。これは主に、入力の手間を省くために利便性のために使用されています。
これは当てはまりません。 map(:id.to_proc)は、mapが引数を受け付けないため、ArgumentErrorをスローします。引数としてProcを渡すことは、ブロックを供給することと同じではありません**。 ''と ''は、Procをブロックに変換し、そのオペランドがProcでない場合は、まずto_procを呼び出してからブロックに変換します。 – sepp2k
@ sepp2k:うん、私はそこに '&'を忘れてしまった。 –
あなたの最初の文は、「&x'to'proc'と同じです」というようなものも読んでください。ただしその定義は無限に再帰的です。 – sepp2k
これはすべてPost
オブジェクトを受け取り、それぞれに対してid
メソッドが呼び出された配列を作成します。
つまり、ActiveRecordの場合、データベース内のすべてのPost
エンティティに対してid
属性の配列が取得されています。
これはRubyのトリックです。これは、Rubyがダイナミックな型変換を行うことに依存しています。 Symbol#to_proc trick hereの説明があります。
&あなたは
Post.allは、メソッド.MAPの受信機であるブロックを渡していることを意味し、そのブロックは、それが反復処理
Post.all.map { |item| # do something }
http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-map
に渡されています配列を作成し、シンボル#to_procでラムダを作成する
ありがとうございました。この質問は検索するのが少し難しいです。ごめんなさい。 –