新手问题 嵌套 each_line 仅执行一次的问题

hellomac · 2020年12月07日 · 最后由 crosspass 回复于 2020年12月07日 · 279 次阅读
# cat id.txt
a
bb
ccc
dddd
eeeee

# cat test.txt
333333
444444


file = File.open("./id.txt")
file1 = File.open("./test.txt")
  file.each_line do |line|
    p '$$$' + file.lineno.to_s
    file1.each_line do |line1|
      p '*****' + file1.lineno.to_s
    end
 end
file.close
file1.close
# 输出结果:
"$$$1"
"*****1"
"*****2"
"$$$2"
"$$$3"
"$$$4"
"$$$5"

为什么第二次循环没有再次执行 file1 中的 block 内容? 此处不讨论为什么不用 readlines ,仅就上述例子。

第一次循环的时候,file1.each_line 已经循环到 file1 的结尾了。

从头开始循环需要 file1.rewind 重新定位到文件的开头

hellomac 关闭了讨论。 12月07日 20:38
需要 登录 后方可回复, 如果你还没有账号请 注册新账号