電話すると
@data.each do |d|
some code here
end
メソッドは何eachを返しますか?オブジェクトの配列?または、より一般的には、do...endブロックは何を取りますか?
電話すると
@data.each do |d|
some code here
end
メソッドは何eachを返しますか?オブジェクトの配列?または、より一般的には、do...endブロックは何を取りますか?
列挙可能なオブジェクトのメンバーを繰り返し処理します。したがって、@dataが配列の場合、配列の要素を一度に1つずつ返しdます。正確な動作は、オブジェクトのタイプによって異なります。ドキュメントを参照してください
Books.allオブジェクトを返します。これは配列ではありませんが、この場合は1つのように動作します。
eachこの場合、レシーバーを返します@data。do...はendブロックです。このメソッドは、データ内の値ごとに1回each(メソッドを使用して)ブロックを実行します。yieldこれはイテレータと呼ばれます。配列の場合は配列内のすべての値を反復処理し、ハッシュの場合は(key、value)のペアごとに1回実行します。独自のクラスに対して独自のイテレータを定義できます。
の戻り値はeach、呼び出されるオブジェクトによって異なります。配列で呼び出されると、配列を返します。
あなたの場合、メソッドeachは各値ごとに1回ブロックを実行し、各値をパラメーターとしてブロックに送信します。
例えば-
a = [1,2,3]
a.each do |n|
p n
end
と同じです
p a[0]
p a[1]
p a[2]