「==」と「===」はクラスにより挙動が異なる場合があります。
例えば、Stringクラスならば
> "str" === String => false > "str" == String => false > String === "str" => true > String == "str" => false
という動きになります。
case文の場合、判定に「===」を使います。
上で示したように、「===」では順番が重要になります。
caseではwhenの後ろに左の式、caseに右の式をおきます。
case "str" when String then puts 1 when Enumerator then puts 2 else puts 0 end > 1 => nil case String when "str" then puts 1 when 2 then puts 2 else puts 0 end > 0 => nil
というわけで、継承を使わずに自前メソッドをcaseで比較したい場合は以下のようにします
……下の例だと何の意味もありませんが(
class UltimateQuestion def self.=== a a == 42 ? true : false end end => nil > UltimateQuestion === 42 => true > 42 === UltimateQuestion => false case 42 when UltimateQuestion then puts 1 when Numeric then puts 2 else puts 0 end > 1 => nil