[#19457] equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org>

ふと気がついたのですが、

39 messages 2003/02/02
[#19460] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/03

まつもと ゆきひろです

[#19473] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044245817.592933.31973.nullmailer@picachu.netlab.jp>,

[#19474] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19475] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044329220.257740.28127.nullmailer@picachu.netlab.jp>,

[#19476] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19477] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044331431.138035.28173.nullmailer@picachu.netlab.jp>,

[#19478] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19479] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044332948.099873.28206.nullmailer@picachu.netlab.jp>,

[#19482] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19486] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

In article <1044338964.502066.28474.nullmailer@picachu.netlab.jp>,

[#19491] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19493] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19556] compare between String and Exception — Tanaka Akira <akr@...17n.org> 2003/02/12

さらに気が付いたのですが、

[#19514] [Oniguruma] Version 1.7.1 — "K.Kosako" <kosako@...>

ftp.ruby-lang.orgに、onigd20030207.tar.gzを置きました。

19 messages 2003/02/07

[#19548] [PATCH] file.c for (PR#389) and (PR#390) — nobu.nakada@...

なかだです。

20 messages 2003/02/11
[#19572] Re: [PATCH] file.c for (PR#389) and (PR#390) — pegacorn@... 2003/02/14

From: nobu.nakada@nifty.ne.jp

[#19648] Re: SEGV at search_method in eval.c (PR#400) — nobu.nakada@...

なかだです。

13 messages 2003/02/24

[ruby-dev:19477] Re: equality between "a" and Exception.new("a")

From: Tanaka Akira <akr@...17n.org>
Date: 2003-02-04 04:18:28 UTC
List: ruby-dev #19477
In article <1044331431.138035.28173.nullmailer@picachu.netlab.jp>,
  matz@ruby-lang.org (Yukihiro Matsumoto) writes:

> え、URIは後者を仮定してるんですか。

    def ==(oth)
      if oth.kind_of?(String)
        oth = URI.parse(oth)
      end

      if self.class == oth.class
        self.normalize.component_ary == oth.normalize.component_ary
      else
        false
      end
    end

という感じですね。最初の if が後者を仮定していると私が感じるところです。

> 私の書き方が悪かったかな。先程の文章では
>
>   前者
>
>   ==は右辺をto_strやto_aryで変換しない
>
>   後者
>
>   to_strやto_aryを定義したクラスは==の比較で失敗する前に自分
>   自身をto_strやto_aryで変換してから比較してみる(というルー
>   ルを今後設定する)
>
> という意味だったんですけど。

そう理解しています。そして、URI はほぼ後者の立場をとっているといってい
いと思います。まぁ、String に変換して比較するのでなく URI に変換して比
較するのがちょっと違いますが。

> URIが仮定して一貫性が崩れているものって、この場合なんですか。

URI は String#== は引数を to_ary で変換することを仮定して、交換律が成
り立つようにしてある、ということです。

> 問題は
>
>   String#==やArray#==は右辺に対してto_strやto_aryを適用する
>   ため、交換則が成立しない場合がある。
>
> だと思っていました。で、上記のふたつの対応法のいずれかがあり、
> 私は前者が良いだろうと思った、というのが私に取っての現状なの
> ですが、「今、問題が起きはじめたので直したほうが」という「問
> 題」と「直す」は私の考えているものとは違うものなのでしょうか。

私も前者が良いと思います。

が、すでに、URI という後者を仮定して == にトリックをいれて交換律を成り
立たせていたものが存在し、その仮定が崩れたために URI と String の交換
律が壊れたというのがここでいう問題です。

結局のところ話は単純で、3行消してはどうか、というだけのことなんですが。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread