まつもと ゆきひろです

In message "[ruby-list:10473] case with Class"
    on 98/10/30, MineroAoki <aamine / dp.u-netsurf.ne.jp> 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

で望み通りです.
                                まつもと ゆきひろ /:|)