From: Masatoshi SEKI Date: 2001-07-26T00:28:28+09:00 Subject: [ruby-dev:14082] private instance variable と _dump/_load 咳といいます プライベートインスタンス変数を操作するAPIがない時に _dump/_loadが書けるか否かの話題です。 [ruby-dev:14037] (ごとけんさん) | > |marshalの問題については、private instance method導入と共に、 | > |_load/_dumpが各クラスごとに呼ばれる | > |(A |ってオプションを思いつきました。まつもとさんの受けは悪そうですが。。。 | > | > 自動的にするってんなら賛成しません。私なら「superで明示的に | > 連鎖して」っていうかなあ。CLOSならメソッドコンビネーションを | > 使えとか言いそうだ。 | | ぼくも明示的に連鎖の方がよいと思います。自動っていうのはそれ | はそれでユーザが制御しにくいような。 そう言えば Object#_dump はないですよね。superで呼べるとも限らないのかな。 [ruby-dev:14053] (まつもとさん) > |クラスメソッドの_loadを呼ぶとそのクラスのインスタンスが返りますよね。 > |そうすると super するごとにスーパークラスのインスタンスが返ったり > |しませんか? > | > |本当は自分のクラスのインスタンスの一部の状態(スーパークラスが > |担当している状態)を_loadしたいと思うのですが、上手にできそうですか? > > ああ、なるほど。そういう意味ではクラスメソッドのsuperによる > 連鎖は役に立ちませんね(だめじゃん、作者がそれじゃ)。 > > 自作の_load(クラスメソッド)からインスタンスメソッドを呼び、 > それが連鎖するというスタイルで解決するのはどうでしょう。要は > initializeと同様の仕組みということですが。 結局、現状のMarshalと_dump/_loadの組合せではすんなりいかないですよね。 ですからプライベートインスタンス変数にアクセスするAPIは必要だと思います。 # メソッド名や場所にはアイデアはありません。