From: Tanaka Akira Date: 2004-04-16T11:25:07+09:00 Subject: [ruby-dev:23399] Re: to_str再考 In article <1082081621.104276.25907.nullmailer@picachu.netlab.jp>, matz@ruby-lang.org (Yukihiro Matsumoto) writes: > それで良いような気もします。そもそもなんでnilを返すかという > と、Stringでないもの(暗黙の変換が定義されていないもの)と比較 > した時にはnilを返すという意図があるようなのですが(って自分で > そうしたんだけど)、そもそもここを区別する必要はないような気 > もしてきました。falseでいいか。 私は、その意図にはけっこう賛成なのです。 String#== は比較されると想定されるものの範囲内では true/false を返し、 想定外のものとの比較では nil を返すというわけで。 それと同じ考え方を Symbol#== に適用すると、これは Kernel#== で、これは identity equal なので、全てのオブジェクトと比較され得ると想定され、す べてのオブジェクトとの比較で true/false を返すということでこれもその考 え方の通りの挙動です。 ところが、このふたつが両方とも == であることから、レシーバがどちらであ るかによってどちらの「比較可能範囲」が採用されるかによって、nil/false のどちらかが返るという奇妙な事態が起こるわけです。 この奇妙さを避けつつ、比較可能範囲の概念を扱うことが出来る仕様はあるか、 というのが問題なわけですが、もしかしたら(少なくとも単純なものは)存在し ないかも、という疑念を抱きつつもまだ確信に至っておらず迷っている、とい うのが現在の状況です。 -- [田中 哲][たなか あきら][Tanaka Akira]