[ruby-list:41725] Re: Tempfile#==

From: Yukihiro Matsumoto <matz@...>
Date: 2005-12-23 00:10:46 UTC
List: ruby-list #41725
まつもと ゆきひろです

In message "Re: [ruby-list:41724] Re: Tempfile#=="
    on Fri, 23 Dec 2005 04:23:02 +0900, OOTANI TAKASHI <tksotn@anet.ne.jp> writes:

|> |Tempfile オブジェクトを == で比較すると false になってしまいますが、
|> |そういうものなのでしょうか。
|> 
|> オリジナルに転送しちゃうんでオリジナルとTempfileが一致しない
|> ということのようです。
|
|すいません。ここの理屈がよくわかりません。

TempfileはFileをwrapしているDelegatorなので、==は内部のFile
オブジェクトへ転送されます。仮にaをTempfile、bを内部のFileオ
ブジェクトとすると

 a == a

が呼び出されたとき、==メソッドは内部のFileオブジェクトに転送
され

 b == a

が実行されます。しかし、bはaのことを知らないので、falseにな
るということです。これに対応するためには

 * Delegator側で==を特別扱いする
 * IO#==でto_ioでも使って比較する

などの対応が考えられます。今回は前者を採用して対応してみまし
た。

|何か見落としているんだとは思いますが、わかりません。
|「オリジナル」の意味するところもわかりません。

Delegatorであることが分かれば分かるんじゃないかと。

In This Thread