From: "NAKAMURA, Hiroshi" Date: 2001-07-25T15:06:02+09:00 Subject: [ruby-dev:14060] Re: [ruby-list:30682] Re: overwride method なひです。 > From: Yukihiro Matsumoto [mailto:matz@ruby-lang.org] > Sent: Wednesday, July 25, 2001 2:55 PM > |とりあえず、_dumpという名前はmyDumpとかに読み替えてください。 > |つまり、現行のRuby's marshal機能とは無関係です。 > |で、やりたいことはカスタムマーシャルです。 > > ここまではなんとなく分かるんで、咳さんとカスタムマーシャルに > ついて共闘していただければ(って誰と闘う?)良いと思うのです。 咳さんが3度やって駄目だったものをなひがやってなんとかなるかというと、 どうにもならない気がしています。いやがんばろう。 > |private instance variableのおかげで、カスタムマーシャルをするためには、 > |階層中の各クラスのメソッドを個別に呼び出す必要があります。 > |これを、include一発だけでやりたいです。 > |(includeでなくてもいいけど、コードを局所化して、簡単に利用できるようにしたい) > | > |で、includeでsuperするには、 > | > | mix-inされたモジュールから、mix-inしたほうのモジュールの親クラスが > | mix-inしたモジュールの同名メソッドを呼ぶ > | > |ことができないといけないような気がするんですが、現状できませんし、 > |superにそれを期待するのは無茶だなぁと思います。 > |というわけで前回、「とある特殊なパターンでは、勝手にsuperしてくれー」 > |という要望になりました。 > > この部分は私には読解できませんでした。疲れてるのかな。特に いえ、日本語が下手なんです。わからない人がほとんどでしょう。。。 > |で、includeでsuperするには、 > | > | mix-inされたモジュールから、mix-inしたほうのモジュールの親クラスが > | mix-inしたモジュールの同名メソッドを呼ぶ > > の部分。 もう一度コードで書いてみます。 module C def foo super if self.type.superclass != ::Object end end class A include C end class B < A end B.new.foo # => error B#fooの中でsuperを呼んだら、A#fooが呼ばれて欲しいのです。。。 > | mix-inされたモジュールから、mix-inしたほうのモジュールの親クラスが --- C ---------------- --- B -------------------- --- A -- > | mix-inしたモジュールの同名メソッドを呼ぶ --- C -------------- --- foo ---- モジュールとかクラスとかの用語がでたらめですね。すいません。