From: matz@... (Yukihiro Matsumoto) Date: 1999-06-24T17:15:48+09:00 Subject: [ruby-list:15105] Re: delegate.rb まつもと ゆきひろです In message "[ruby-list:15104] delegate.rb" on 99/06/24, Wakou Aoyama writes: |require "delegate" | |class CGI < SimpleDelegator | attr_accessor("params") | def initialize | @params = {} | super(@params) | end |end | |query = CGI.new |query.params = {"a"=>"A"} |p query.params # ==> {"a"=>"A"} |p query # ==> {} |この最後の行で {} が返って来るのはなぜでしょうか? @param の値が返っ |て来る方が自然な気がするので、バグのような感じもするのですが。 ここでdelegateの対象になったのは @params という変数ではなく、 「その瞬間に @params に格納されていたハッシュ」です。ですか ら、@paramsの値が変わってもdelegate先は変わらないわけです。 というわけで、もし query.params = {...} の内容を反映させたけ れば、 def params=(hash) @params.update(hash) end とか、あるいは def params=(hash) # hashの型チェックをした方が良い.. @obj = hash end のような明示的な更新が必要でしょう。 まつもと ゆきひろ /:|}