0

ルビースクリプトに次のブロックがあります。

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

/aPattern/何も一致しない場合でも、ブロックは実行されますか?そうでない場合は、強制的に実行する方法はありますか?

4

1 に答える 1

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

=~は、正規表現の一致演算子であることに注意してください。

于 2013-01-07T01:36:36.087 に答える