Ruby case文がどう内部的に解釈されているか。

制御構造 (Ruby 3.2 リファレンスマニュアル)

case 0
when 1, 2
    stmt1
when 3, 4
    stmt2
else
    stmt3
end

このようなcase文があったとき、Rubyは以下のように解釈する。

_tmp = 0
if 1 === _tmp or 2 === _tmp
  stmt1
elsif 3 === _tmp or 4 === _tmp
  stmt2
else
  stmt3
end

また === がどのような条件で真になるかは、各クラスの === メソッドの動作についてのドキュメントを参照して下さい。

case文の例

下記記事よりいくつかのcase文の例を抜粋。

Understanding Ruby - Triple Equals - DEV Community

case 1990
when ..1899     then :too_early
when 1900..1924 then :gi
when 1925..1945 then :silent
when 1946..1964 then :baby_boomers
when 1965..1979 then :generation_x
when 1980..2000 then :millenials
when 2000..2010 then :generation_z
when 2010..     then :generation_alpha
else
  :who_knows
end
# => :millenials
case 'foobar'
when String, Integer then :one
when Float, NilClass then :two
else
  :three
end
# => :one
divisible_by = -> divisor { -> n { n % divisor == 0 } }

(1..15).map do |n|
  case n
  when divisible_by[15] then :fizzbuzz
  when divisible_by[5]  then :buzz
  when divisible_by[3]  then :fizz
  else
    n
  end
end
# => [
#   1, 2, :fizz, 4, :buzz, :fizz, 7, 8, :fizz, :buzz,
#   11, :fizz, 13, 14, :fizzbuzz
# ]
case [0, 1]
in [..10, ..10] then :close_to_base
in [..100, ..100] then :venturing_out
in [..1000, ..1000] then :pretty_far_out
else :way_out_there
end
# => :close_to_base