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

From: OOTANI TAKASHI <tksotn@...>
Date: 2005-12-23 13:35:54 UTC
List: ruby-list #41727
大谷です。
解説ありがとうございます。

From: Yukihiro Matsumoto <matz@ruby-lang.org>
Subject: [ruby-list:41725] Re: Tempfile#==
Date: Fri, 23 Dec 2005 09:10:46 +0900
> |> |Tempfile オブジェクトを == で比較すると false になってしまいますが、
> |> |そういうものなのでしょうか。
> |> 
> |> オリジナルに転送しちゃうんでオリジナルとTempfileが一致しない
> |> ということのようです。
> |
> |すいません。ここの理屈がよくわかりません。
> 
> TempfileはFileをwrapしているDelegatorなので、==は内部のFile
> オブジェクトへ転送されます。仮にaをTempfile、bを内部のFileオ
> ブジェクトとすると

x=Tempfile.new("xx")
y=x ; p x==y # とするまでもなく、
p x==x # ですでにfalseということですね。
p x==x.__getobj__ # だとtrueになる。イメージはつかめました。

>  * Delegator側で==を特別扱いする
>  * IO#==でto_ioでも使って比較する
> 
> などの対応が考えられます。今回は前者を採用して対応してみまし
> た。

1.9での対応方法ということでしょうか。確かに a==a が false なのは
気持ち悪いです。

委譲については、ちょうど結城さんのデザインパターンの本を買ったこともあり、
引き続き勉強してみます。「rubyによるデザインパターン入門」とかあれば
それを買ったんですが。

-- 
OOTANI TAKASHI <tksotn@anet.ne.jp>


In This Thread

Prev Next