zan*_*bri 2 ruby each loops file
我知道三重循环的想法给某些人的思想带来了恐惧,但我有一个具有以下结构的代码:
paragraph.split(/(\.|\?|\!)[\s\Z]/).each do |sentence|
myArrayOfFiles.each_with_index { |ma,j|
ma.each_with_index { |word,i|
sentence.gsub!(...)
}
}
end
Run Code Online (Sandbox Code Playgroud)
两个外部循环按预期运行,但由于某种原因,内部循环sentence仅在第一个循环上运行.你知道为什么吗?如何让内循环遍历所有sentences?
我在Ruby 1.8.7上运行,并且只使用each循环尝试了相同的代码并得到了相同的结果.有任何想法吗?
编辑:
myArrayOfFiles 是一个数组填充:
AFile = File.open("A.txt")
BFile = File.open("B.txt")
myArrayOfFiles << [Afile,BFile]
myArrayOfFiles.flatten!
Run Code Online (Sandbox Code Playgroud)
您的问题是myArrayOfFiles包含文件实例.当您使用其中一个文件进行迭代时ma.each_with_index,它将逐行浏览文件并停在EOF处.然后,你尝试用下一个迭代,sentence但文件已经在EOF,所以ma.each_with_index没有任何东西可以迭代,没有任何有趣的事情发生.rewind在each_with_index再次尝试之前,需要调用将文件移回到开头:
paragraph.split(/(\.|\?|\!)[\s\Z]/).each do |sentence|
myArrayOfFiles.each_with_index do |ma, j|
ma.rewind # <------------------------- You need this
ma.each_with_index do |word, i|
sentence.gsub!(...)
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |