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只返回一个数组,它不处理块。您应该只向知道如何处理块的方法调用提供块。如果该方法无法处理块,则不会发生任何事情。

(旁白:如果您each对结果进行 an 操作,readlines那么您将在每一行上获得相同的行号。)

于 2012-06-30T04:42:30.057 回答