0

我正在使用命名的 rexeg 捕获组,并且我的 case 语句适用于match,但它给了我不想要的数据。当我运行下面的代码时,它只能匹配一个语句。我哪里错了?

File::open(file).lines do |line|
    case
      when line.scan(regex1) then puts line.scan(regex1)
      when line.scan(regex2) then puts line.scan(regex2)
      when line.scan(regex3) then puts line.scan(regex3)
    end
  end
end
4

1 回答 1

4

case执行第一个真表达式。

如果您有多个检查,其中每个检查都可能是真的,您应该使用多个if- 语句。

File::open(file).lines do |line|
  puts line.scan(regex1) if line.scan(regex1)
  puts line.scan(regex2) if line.scan(regex2)
  puts line.scan(regex3) if line.scan(regex3)
end

我认为以下版本更加灵活和高效:

File::open(file).lines do |line|
  [ regex1, regex2, regex3] do |regex|
    if result =  line.scan(regex)
            puts result
    end
  end
end
于 2012-09-18T21:03:49.707 回答