From: IKEGAMI Daisuke <daisu-ik / is.aist-nara.ac.jp>
Subject: [ruby-math:00475] Re: NArray#==
Date: Wed, 27 Jun 2001 04:37:41 +0900

るびきちです。

> assert_equal のためだけに限らず、
> if 文で == を使うときいつもと違う振舞いをします。
ですよね……。

> require 'narray'
> a = NArray[0]
> puts 'Oops' if a == NArray[1]
> puts 'Oops' if a == 1
> puts 'Oops' if a == [1]
そうです、ちょっと実験してみましたがこうなってしまうのがかなり痛いです。
どう考えてもおかしいですよね。

> 提案ですが、Ruby の慣習に従って == と true/false/例外 を
> 返すようにしてはどうでしょうか。今までの NArray の実装の == は
> 別名をつけることにして…
これに賛成です。

> > irb(main):002:0> NArray[1,2] == NArray[1,2]
> > NArray.byte(2): 
> > ^@[ 1, 1 ]
> > irb(main):003:0> NArray[1,2] == NArray[1,3]
> > NArray.byte(2): 
> > ^@[ 1, 0 ]
> > ではなくてそれぞれ
> > [true, true] と [false, false] を返した方がいいような気もしてきました。
> 
> その案でも、やはり
> puts 'Oops' if NArray[1, 2] == NArray[1,3]
>                # => [false, false] は nil でも false でもないので真
> のような気がします。
あっ、これは == という名前の問題はおいといて、その定義の((*内容*))についてです。
どちらにせよ == という名前にはちょっと抵抗があります。

> 等しかったらその場所に 1 が、等しくなければ 0 が入るという比較が
> 必要になることもあるかもしれないので、
> そのような比較は == じゃない名前だったらなあと思いますがどうですか。
そういうことです。


るびきち☆
http://voo.to/ruby/ ←Ruby大衆化計画(笑)