1

我必须在 Ruby 中处理一些笨重的文件。给定一个特定的 ID,我知道与该 ID 关联的数据不会超过一个文件,但我不确定是哪个文件。它也可能不存在,这是我需要处理的错误状态。所以我有一个这样的循环:

files = ['a','b','c','d']
files.each do |filename|
  File.open(filename,'r') do |f|
    break unless contains_id(myid)
    do_stuff
  end
end

所以我有两个问题:

  1. 一旦我找到包含我正在寻找的数据的文件,什么是打破循环的正确方法?

  2. 如何处理数据不在任何文件中的情况?

这是我想出的,但感觉很粗糙:

files = ['a','b','c','d']
found = false
files.each do |filename|
  break if found
  File.open(filename,'r') do |f|
    break unless contains_id(myid)
    found = true
    do_stuff
  end
end
do_error_stuff unless found
4

1 回答 1

3

您可以使用Enumerable#find而不是查找块返回 true#each的第一个条目,或者使用 else 。所以这看起来像:filesnil

files = ['a','b','c','d']
file = files.find do |filename|
  File.open(filename,'r') do |f|
    contains_id(myid)
  end
end
do_error_stuff unless file
于 2013-03-25T05:25:29.713 回答