大谷です。 解説ありがとうございます。 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>