立石です。 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>