青山です。

Fri, Apr 16, 1999 at 06:03:30PM +0900 において
Shin-ichiro Hara さん曰く:

> 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" を参照していると
> 言っていいのでしょうか?参照している様にも見えるけど、単に参
> 照関係を横から見ているだけの様にも思えるし。

参照していると言えると思います。

foo.e(0).concat(" OBJ1")
foo.e(1).concat(" OBJ2")
p foo.e(0) #=> "obj1 OBJ1"
p foo.e(1) #=> "obj2 OBJ2"

> そもそもオブジェクトがオブジェクトを参照するってどういう定義
> かしら。変数がオブジェクトを参照するのと、変数がオブジェクト
> に束縛される(広義)ことは同値でしょうか?

同値ではあると思いますが、それが存在する期間を考慮するなら、これらの言
葉はわけて使用した方がよりわかりやすいような気がします。

foo.e() とは、変数 foo が束縛している YaArray クラスのオブジェクトの e
メソッドによって、定数 TheArray が束縛している Array クラスのオブジェ
クト [] が参照される事です。

とか。

この例の中での「束縛」はそのまま「参照」に置き換えても通じますが、逆に
すべてを「束縛」とすると違和感があります。

これは、foo.e() の束縛期間が短く、すぐに消えてしまう事から、束縛とはい
いにくい(感じにくい)事によるものだと思われます。

上記のように語感の違い程度の差しか無いとは思いますが、長期間の場合、束
縛と呼び、短期間の場合、参照と呼ぶとしっくりくるような感じはします。


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>