豊福@パパイヤです。 青山さん >> A = []; B = []; >> ... >> def e(i); if (i*i >= 0) A; else B ; end >> >> e(i) は A しか実際には返しませんが B も参照していると思い >> ます。 > > おそらく B は参照していないと思います。 > メソッドは手続きであり、式 if (i*i >= 0); A; else B; end は B を評価し > ないので、このメソッド、および式による B の束縛は発生しないと思われま > す。 私は「オブジェクトx がオブジェクトy を参照している」とは 「オブジェクトy が GC されたら直接的にオブジェクトx が困る」 というイメージで考えていました。 普通の処理系の実装で上の例では最適化しない限り B は GC できないだろうと考えて「B も参照している」と書いたのですが 先のメールに書いたとおり、勝手にある一つの実装を持ってきて そこから参照を考えたら破綻するようです。ということで上の例 の「B も参照している」は撤回します。 well-definedな「参照」にするためには 「オブジェクトx が参照しているオブジェクトの集合」とは 「万能の神による究極に最適化された実装においてオブジェク トx のために GC できないオブジェクトの集合」 いいかえると 「オブジェクトx のために GC できないオブジェクトの集合 (これは実装に依存する)のすべての実装に関する共通集合」 にしないとダメかなと思ってます。ただこんな定義で役に立つのか? --- 豊福@パパイヤ unbound / papaya.juice.or.jp toyofuku / juice.or.jp