From: aamine@... Date: 1998-11-01T17:30:17+09:00 Subject: [ruby-list:10562] Re: case with Class あおきです。 in mail of [ruby-list:10544] Re: case with Class wrote: >やはり===に二つの意味を持たせるのは、混乱の元になるのでは >ないでしょうか。 (中略) >もっとも、どのクラスのインスタンスか知りたい場合の方が >多いと思うので、今の仕様が妥当なのかもしれません。 そんな気もします。ぼくがString#===に==の機能を持たせて欲しかった 最大の理由は「それが(原因不明の)バグになって30分くらいはまった」 ということだったので、はっきりと「Class#===には==の機能はない」と まえもってわかっていればとりあえず問題はなかったわけですね。 そんなわけで、のちのちのためにもマニュアルの改善案を作ってみました。 [syntax.html#when] (説明文) caseは複数のオブジェクトとの一致判定を行なう条件分岐構文です。 caseに指定されたひとつのオブジェクトAとwhen節に指定された オブジェクトとの一致判定をつぎつぎに行ない、最初に一致したwhen節の 本文を実行します。一致判定は、when節に指定されたオブジェクトの ===メソッドを、オブジェクトAを引数として呼び出すことで行なわれます。 ===メソッドがどのようなとき真になるかは、各クラスの===の動作を 参照してください。 [object.html#===] このメソッドは主にcase文での比較に用いられます。 Object#===の挙動は==と同じですが、下位クラスではそれぞれの適正に 合わせてこのメソッドを再定義しています。 [array.html#===] このメソッドは主にcase文での比較に用いられます。 Array#===はArray#include?と同じ動作をします。 [module.html#===] このメソッドは主にcase文での比較に用いられます。 Module#===はModule#kind_of?と同じ動作をします。 [range.html#===] このメソッドは主にcase文での比較に用いられます。 引数が範囲内に含まれている時trueを返します。それ以外の時は falseを返します。 [regexp.html#===] このメソッドは主にcase文での比較に用いられます。 Regexp#===はRange#=~と同じ動作をします。 -------------------------------------------------------------------- あおきみねろう@一橋大学 Mail to: aamine@dp.u-netsurf.ne.jp