Pattern branches can add an if guard for extra checks.

pattern guard A guard runs after a pattern matches and can decide whether that branch should be used.

Guard Clauses

score
guard_clauses.rb
Replay: real traced execution (multi-file project)
score = 82
record = { name: "Ada", score: score }

case record
in { name: name, score: value } if value >= 80
  label = "#{name}:great"
in { name: name, score: value } if value >= 60
  label = "#{name}:pass"
else
  label = "review"
end

puts "score=#{score}"
puts "label=#{label}"
score = 55
record = { name: "Ada", score: score }

case record
in { name: name, score: value } if value >= 80
  label = "#{name}:great"
in { name: name, score: value } if value >= 60
  label = "#{name}:pass"
else
  label = "review"
end

puts "score=#{score}"
puts "label=#{label}"
score = 70
record = { name: "Ada", score: score }

case record
in { name: name, score: value } if value >= 80
  label = "#{name}:great"
in { name: name, score: value } if value >= 60
  label = "#{name}:pass"
else
  label = "review"
end

puts "score=#{score}"
puts "label=#{label}"
  1. score ← 82

    1score→ 82 = 82  #@score=55, 702record = { name: "Ada", score: score }34case record5in { name: name, score: value } if value >= 806  label = "#{name}:great"7in { name: name, score: value } if value >= 608  label = "#{name}:pass"9else10  label = "review"11end1213puts "score=#{score82}"14puts "label=#{labelAda:great}"
    outputscore=82
    label=Ada:great
  1. score ← 55

    1score→ 55 = 552record = { name: "Ada", score: score }
  2. case record in { name:

    4case record{:name=>"Ada", :score=>55}5in { name: name, score: value } if value >= 806  label = "#{name}:great"
  3. label ← review

    8  label = "#{name}:pass"9else10  label→ review = "review"11end
  4. puts "score=#{score}"

    13puts "score=#{score55}"14puts "label=#{labelreview}"
    outputscore=55
    label=review
  1. score ← 70

    1score→ 70 = 702record = { name: "Ada", score: score }34case record5in { name: name, score: value } if value >= 806  label = "#{name}:great"7in { name: name, score: value } if value >= 608  label = "#{name}:pass"9else10  label = "review"11end1213puts "score=#{score70}"14puts "label=#{labelAda:pass}"
    outputscore=70
    label=Ada:pass