前田です。 中村暁史 <anakamur / exa.i-tech.co.jp> writes: > ->TWriter/TReaderって何でしたっけ。 > > たしか(ぉぃぉぃ)delphi開発環境で、Formおよびその上に載ってるobject達が > 自分が持ってる永続化したい情報を「託してfileに書いて貰う」のが > TWriterだったと思いました… なるほど。 もっと一般的な(Input/Output) Streamみたいな名前ですね(^_^; > やっと(5日目)Moduleにattrってメソッドがあるのに気づいたんですが、 > こいつを再定義かなんかして(いや、これを利用して別途作成の > ほうがいいかな)、デフォの属性アクセスメソッドの作られ方を > 変更(ないしは追加)するってのが、出来るのかなーとか… attrは普通にメソッドを定義するのと同じなので、特別なことが したい時は自分でメソッドを定義するのがよいと思います。 あまりよい例ではないですが、 def age=(val) if @age > val fail "error" end @age = val end とか。 > -> def _dump(limit) > -> # @name, @ageのみ保存 > -> return Marshal::dump([@name, @age], limit) > -> end > > あのー5日目なんで間違えてるかもと思いますが、 > Marshal::dumpの第二引数ってlimitじゃなくてportってわけでは > ないんでしょうか? > *がついてない(下記)んで引数の数は2つですよね。 > #dump(obj[,port][,limit]) > #ていう説明書の定義は、そう理解していいんですよね?ね? マニュアルの理解はそれが正しいです。 ただし、ソースを読むとportがFixnumだった場合はlimitとして 扱ってくれるようになっていることがわかります。 # 現状ではドキュメントの整備はまだまだなので、疑問に思ったら # ここで聞いてください。 > -> def Person._load(str) > -> # loadしたデータを引数にしてコンストラクタを起動 > -> return new(*Marshal::load(str)) > -> end > > *の意味を慌てて説明書読みました。バラすわけですね。 > ってことはバラさらないformatにするのも可能っすねきっと。 > newが[]を受け取るようにするとかして。 可能です。 そうすると、普通にPerson.newする時に配列を生成しなければいけ なくなるのでちょっと面倒になりますけどね。 -- 前田 修吾