こんにちは、黒田ひらくと言います。

Akira Hayakawa さんは書きました:
> こんばんわ。Akiraです。
> 
> Rubyではequal?がオブジェクトidの同一性を調べるもので、==がオブジェクトの値の一致を調べるものだとたのしいRubyのp.66に書いてあります。
> また、assert_equalは==ならパスする関数で、assert_sameはequal?ならパスする関数だと以下のリファレンスに書いてあります。
> (中略)
> @nameは同じなのに、値が違うと言われます。
> 実はこれはJavaでもなんでこうなるか分からなくて放置していたところで、
> 放置しておいても良い事ないので、どなたか教えていただけませんか?
> idの一致はわかりやすいのですが、Rubyにおける==というのは何を持って真で
あるとみなすオペレータなのでしょうか?

Objectクラスの == が equal? と同じ動作をするように定義されていて、Akira
さんのNameクラスがこの==を継承しているからです。

class Name
  def ==(other)
    @name==other.name
  end
end
とかしたら、期待通りのテスト結果になると思います。

Stringクラスなどは独自に==を定義し直しているので、"a"==("a".dup)がtrueに
なったりします。
-- 
--------------------------------------------------
 黒田 拓(くろだ ひらく)
    hiraku / sapporo.email.ne.jp
    http://www.hinet.mydns.jp/
--------------------------------------------------