豊福@パパイヤです。 原さん > TheArray = [] > class YaArray > def push(x); TheArray.push x; end > def e(i); TheArray[i]; end > end > foo = YaArray.new > foo.push("obj1") > foo.push("obj2") > p foo.e(0) #=> "obj1" > p foo.e(1) #=> "obj2" > > このときオブジェクト foo は "obj1", "obj2" を参照していると > 言っていいのでしょうか?参照している様にも見えるけど、単に参 > 照関係を横から見ているだけの様にも思えるし。 参照とは何かに答えられないですが、現実の GC の実装の 感覚に合う「何か」は私もあると思います。 それに合うように上の例を解釈すると、 def e(i); x = TheArray; return x.[](i); end と読み直して「e() のコードの中に TheArray を参照する値が 入っている。TheArray[0] は return をつたって通り抜けて しまうから "obj1" そのものは参照していない」と見ています。 (e() のコード中から TheArray につながる紐が出ている :-)) def b.[](i); i+8; end も引数をつたって入ってきて通り抜けてしまうだけだと。 > coalgebra 自体は日常的な商売道具なのですが、それが一分野 > の名前になっているとは初耳です。ここでの意味は、オブジェ > クトに対する全てのメッセージ(とパラメータ)に対する副作用 > と返り値の「表全体」をもってオブジェクトの状態と定義する、 > という感じでしょうか。 詳しい意味はわからないのですが、もしあらゆる実際の返り値 だけから参照を考えるという意味なら次の例が私の感覚に合い ません。 A = []; B = []; ... def e(i); if (i*i >= 0) A; else B ; end e(i) は A しか実際には返しませんが B も参照していると思い ます。 --- 豊福@パパイヤ unbound / papaya.juice.or.jp toyofuku / juice.or.jp