これは私には本当に奇妙に思えます:
f = File.open(Dir.pwd+'/tmp','r')
f.readlines do |l|
puts "#{f.lineno}:#{l}"
end
#=>["first line","second"]
コンソールに出力がない理由
1: first line
2: second line
これは私には本当に奇妙に思えます:
f = File.open(Dir.pwd+'/tmp','r')
f.readlines do |l|
puts "#{f.lineno}:#{l}"
end
#=>["first line","second"]
コンソールに出力がない理由
1: first line
2: second line
あなたがしたいeach
のではなくreadlines
。
File.open(Dir.pwd+'/tmp','r') do |f|
f.each do |l|
puts "#{f.lineno}:#{l}"
end
end
readlines
一度に配列全体を読み取ります。
特定のケースではreadlines
、配列を取得するために呼び出しましたが、メソッドにブロックを渡しましたreadlines
。このメソッドreadlines
は配列を返すだけで、ブロックは処理しません。ブロックの処理方法を知っているメソッド呼び出しにのみブロックを提供する必要があります。メソッドがブロックを処理できない場合、何も起こりません。
(余談: theneach
の結果に対してreadlines
を実行すると、各行で同じ行番号が得られます。)