Pattern Matching
Case In Basics
Ruby pattern matching uses case ... in to compare a value against patterns.
case in
`case ... in` checks patterns from top to bottom and runs the first matching branch.
Case In Basics
case_in_basics.rb
Replay: real traced execution (multi-file project)
status = "ready"
case status
in "ready"
message = "system ready"
in "error"
message = "needs attention"
else
message = "unknown status"
end
puts "status=#{status}"
puts "message=#{message}"
status = "error"
case status
in "ready"
message = "system ready"
in "error"
message = "needs attention"
else
message = "unknown status"
end
puts "status=#{status}"
puts "message=#{message}"
status = "other"
case status
in "ready"
message = "system ready"
in "error"
message = "needs attention"
else
message = "unknown status"
end
puts "status=#{status}"
puts "message=#{message}"
status ← ready
1status→ ready = "ready" #@status="error", "other"23case status4in "ready"5 message = "system ready"6in "error"7 message = "needs attention"8else9 message = "unknown status"10end1112puts "status=#{statusready}"13puts "message=#{messagesystem ready}"outputstatus=ready message=system ready
status ← error
1status→ error = "error"23case status4in "ready"5 message = "system ready"6in "error"7 message = "needs attention"8else9 message = "unknown status"10end1112puts "status=#{statuserror}"13puts "message=#{messageneeds attention}"outputstatus=error message=needs attention
status ← other
1status→ other = "other"case status in
3case statusother4in "ready"5 message = "system ready"message ← unknown status
7 message = "needs attention"8else9 message→ unknown status = "unknown status"10endputs "status=#{status}"
12puts "status=#{statusother}"13puts "message=#{messageunknown status}"outputstatus=other message=unknown status