From: matz@... (Yukihiro Matsumoto) Date: 2002-07-03T08:45:21+09:00 Subject: [ruby-dev:17631] Re: substitution at when-clause まつもと ゆきひろです In message "[ruby-dev:17630] Re: substitution at when-clause" on 02/07/03, Takaaki Tateishi writes: |> whenになにを書けば適切かという情報を「=== を使う」というとこ |> ろから得るのは王道だと思いますが、たとえばwhen節に置くクラス |> 別に覚えておくという手もある(というか、そうしてる人は多いと |> 思う、whenに置くクラスは普通は限られてるし)ので、それだけで |> は「それほど異質でない」とは言い切れないと思います。 | |その覚えるという方法が良いとは言えないのではないでしょうか? |ユーザが提供するクラスで === を再定義しないことを仮定している |ように思えます. 必ずしもそうではないでしょう。===のレシーバはwhenに指定した オブジェクトですから。こちらにはユーザ定義でないオブジェクト (整数とか文字列とか正規表現とかクラスとか)を使うことが普通で しょうから、「良くない」とまでは言えないと思います。逆に必ず ===を使うことを覚えなくてはいけないほど、標準クラスの動作を 置き換えるのは「良くない」ことだと思います。 正直、 === がどちらをレシーバにするかを覚えておくのは結構面 倒なようで、間違って逆に覚えている人をみかけます。となると、 ===を使うことを積極的に考える必要があるとなるとcaseの難しさ がより増えてしまうような。 |そして,===がtrue/false以上の情報を返すなら,その情報を利用して |もらいたいという意図があると思います.逆にcase文で結果を取り出 |せるなら===で利用価値のある値を返そうとする人も増えるのではない |かと思います. 「===がtrue/false以上の情報を返す」のは「その情報を利用して もらいたい」あるいは「その情報を利用すると便利なケースがある」 と設計者/実装者が思ったことを意味するということには同意しま す。しかし、それをcase文の内部で暗黙に呼び出したときにまで 利用することを期待しているかどうかは別です。むしろ、case文を 使うときに考えることが多くなるので、良くないのではないかなあ と感じています。 立石さんの提案するcaseのような制御構造があってはいけないとは 言いませんが、採用するならcaseを拡張するのではなく * 呼び出すメソッドを明示的に指定する * caseではない全然別の予約語を使う 新しい文法にした方が良いと思います(Perl6にならってgivenとか)。 個人的にはそこまでの価値は無いような気もしますが。 まつもと ゆきひろ /:|)