KDOC 709: Rubyのcase/whenはeqqで比べる

この文書のステータス

  • 作成
    • 2026-10-18 貴島
  • レビュー
    • 2026-10-18 貴島

概要

Rubyの case / when は、 when の側の === (eqq) で比べる。 === はクラスごとに意味が違う。クラスなら「そのクラスのインスタンスか」、範囲なら「範囲に入っているか」、正規表現なら「マッチするか」になる。そのため when String や when 1..5 や when /\A1/ が書ける。

The patterns are matched using the === method which is aliased to == on Object. Other classes must override it to give meaningful behavior.

Here the string "12345" is compared with /^1/ by calling /^1/ === "12345" which returns true.

control expressions (case Expression) - Ruby 3.4

[3, "12345", "abc"].each do |x|
  kind = case x
         when 1..5 then "1..5 の範囲"
         when /\A1/ then "1で始まる"
         when String then "String"
         end
  puts "#{x.inspect}: #{kind}"
end
3: 1..5 の範囲
"12345": 1で始まる
"abc": String

関連

なし。