[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

15 messages 2004/04/05

[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

17 messages 2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。落ちる場所がわかりました。

[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — nobu.nakada@... 2004/04/16

なかだです。

[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[ruby-dev:23399] Re: to_str再考

From: Tanaka Akira <akr@...17n.org>
Date: 2004-04-16 02:25:07 UTC
List: ruby-dev #23399
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]

In This Thread