1

これは私には本当に奇妙に思えます:

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
4

1 に答える 1

2

あなたがしたい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を実行すると、各行で同じ行番号が得られます。)

于 2012-06-30T04:42:30.057 に答える