前田です。

中村暁史 <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する時に配列を生成しなければいけ
なくなるのでちょっと面倒になりますけどね。

-- 
前田 修吾