質問: File.open(file_name) File.foreach(file_name) do |line| r.each do |line2| puts line # → 一行目がrの行数分出力されるのみ end end r.close ```
回答: `r.each`を(途中で`berak`することなく)最後まで実行すると、`r`は最後まで読み込んだことになります(読み込み位置がEOFに達している)。その後、`r.each`が再び実行されても、既に最後まで読み込んでいるため、一行も読み込まれず、処理全体がスキップされます。 再度、最初から読み直したい場合は、@metropolis さんの書いているとおり、`r.rewind`で読み込み位置を先頭に戻してください。