如果在Ruby中作为参数传递nil,块是否会运行?

时间:2013-01-07 01:29:15

标签: ruby regex block

我在ruby脚本中有以下块:

for line in allLines
    line.match(/aPattern/) { |matchData|
        # Do something with matchData
    }
end

如果/aPattern/与行中的任何内容不匹配,该块是否仍会运行?如果没有,有没有办法可以强迫它运行?

1 个答案:

答案 0 :(得分:1)

答案是否定的,如果匹配未成功,则不会运行匹配块。但是,for通常不会在Ruby中使用,each更惯用,例如:

allLines.each do |line|
  if line =~ /aPattern/
    do_thing_with_last_match($~) ## $~ is last match
  else
    do_non_match_thing_with_line
  end
end

注意,=~是正则表达式匹配运算符。