From: matz@... (Yukihiro Matsumoto) Date: 1998-10-30T09:55:47+09:00 Subject: [ruby-list:10483] Re: case with Class まつもと ゆきひろです In message "[ruby-list:10473] case with Class" on 98/10/30, MineroAoki writes: |あおきです。 | |今日発見したのですが、 | |case 'This is string'.type |when Array then p "array\n" |when Integer then p "integer\n" |when String then p "string\n" |else p "Don't match\n" |end | |はelseにヒットするんですね。これはそういうものなんでしょうか? |単純に考えると、Stringにヒットしそうなものですが、なにか特別な |理由があるのでしょうか。 ええ,caseは演算子 === を使って比較しますが, Class#=== は一致ではなく,kind_of?だからです.つまり case 'This is string' when Array then p "array\n" when Integer then p "integer\n" when String then p "string\n" else p "Don't match\n" end は望み通りの結果になると思われます. |さらにいえば、上位クラスにもヒットしてくれると便利かも。 |(こんな感じに。) これも case (54.0) when String then ..... when Numeric then ..... # <--- ここにヒットする else ..... end で望み通りです. まつもと ゆきひろ /:|)