まつもと ゆきひろです
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
で望み通りです.
まつもと ゆきひろ /:|)