立石です。

From: MineroAoki <aamine / dp.u-netsurf.ne.jp>
aamine> 今日発見したのですが、
aamine> 
aamine> case 'This is string'.type
aamine> when Array   then p "array\n"
aamine> when Integer then p "integer\n"
aamine> when String  then p "string\n"
aamine> else              p "Don't match\n"
aamine> end
aamine> 
aamine> はelseにヒットするんですね。これはそういうものなんでしょうか?
aamine> 単純に考えると、Stringにヒットしそうなものですが、なにか特別な
aamine> 理由があるのでしょうか。

caseのときの比較には === が使われます。で、
String === String    => false
となるので、このcaseではマッチしません。
だとすると <class> === <class> が false を返す
ことに何か理由があるのでしょうか?
以前、拡張モジュール作ってるときになぜ === は定義
されてないのだろうと思ったことがあったので、、、、

aamine> さらにいえば、上位クラスにもヒットしてくれると便利かも。
aamine> (こんな感じに。)
aamine> 
aamine> case (54.0).type
aamine> when String  then .....
aamine> when Numeric then .....    # <--- ここにヒットする
aamine> else              .....
aamine> end

あると便利な場合もあるのですが、場合分けの要素が
クラスのときだけ別の挙動をするっていうのもなんか
変な気がするので別の制御構造を定義した方がいいよ
うな気がします。
if文でやってもそれほど可読性が悪くなるわけでもない
ですし、、、、、、


			Takaaki Tateishi <ttate / jaist.ac.jp>