-1

電話すると

@data.each do |d|
  some code here
end

メソッドは何eachを返しますか?オブジェクトの配列?または、より一般的には、do...endブロックは何を取りますか?

4

3 に答える 3

2

列挙可能なオブジェクトのメンバーを繰り返し処理します。したがって、@dataが配列の場合、配列の要素を一度に1つずつ返しdます。正確な動作は、オブジェクトのタイプによって異なります。ドキュメントを参照してください

Books.allオブジェクトを返します。これは配列ではありませんが、この場合は1つのように動作します。

于 2013-03-19T00:45:31.593 に答える
2
  • eachこの場合、レシーバーを返します@data
  • do...はendブロックです。
于 2013-03-19T01:00:58.580 に答える
0

このメソッドは、データ内の値ごとに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]
于 2013-03-19T01:42:39.747 に答える