原です。 > 青山です。 > > c = Object.new > > def c.[](x); x; end > p c["foo"] > x が束縛するので c が束縛するとも言えます。ただし、これは x = "foo" と > 同じレベルの事であり、このような x をすべてのオブジェクトを参照してい > ると言えないように、c はすべてのオブジェクトを参照していると呼んではい > けないだろうという意味での例です。 この内容については、ひとまずおいておいて、ここでの「c が束 縛する」という言い方が(何重にも^^;)気になります。 話がかなりデリケートになってきたので、ここで仮に用語を制限 することにしませんか?あくまで「仮」です。正式には Ruby 標 準化委員会にでも任せましょう。:-) 【「用語の使い方」草案1】 (1)変数の束縛 var = "obj" とするとき、変数はオブジェクト "obj" に「束縛 された」といいます。逆にいえば、オブジェクト "obj" は変数 var を束縛する。さらに foo = var とすると、foo も "obj" に 束縛されます。どちらの = も Ruby では「代入」呼ばれます。 (2つの = に区別があるかどうかの判断は保留。) これは広義の束縛であって、lisper にとってこの使い方は気持 ちわるいです。lisper にとっては新しい変数を導入し値を代入 することが束縛です。 気をつけるのは、このとき「オブジェクトが変数に束縛された」 とは言わないといういう事です。(あくまで仮です。)一般に自 由だったり束縛されたりするのは変数であるからです。紐モデル では、変数が紐だったりするので、紐がオブジェクトを縛るイメ ージもあるかと思いますが、紐はただ1つのオブジェクトにしか 結びつかないのにオブジェクトには複数の紐がつく事からも束縛 されているのは、紐の方であるというのも悪い言い方ではないと 思います。 明らかに var が変数であるときは、「var を束縛しているオブジ ェクトが、、、」と言う所を「オブジェクト var が、、、」と言 ってしまっても良いことにしましょう。 (2)変数がオブジェクト参照すること var = "obj" とするとき、変数はオブジェクト "obj" を参照して います。(「参照とは何か」という事と「束縛とどう違うか」に ういては議論中。)少なくともこのときは参照していると言って いいでしょう。 (3)オブジェクトがオブジェクト参照すること オブジェクト obj1 のあるインスタンス変数 @var が他のオブジェ クト obj2 を参照しているときは、「オブジェクト obj1 は obj2 を(@var を通して)参照している」と言って良いでしょう。 (他の場合にもオブジェクト同士の参照関係があるかについては議 論中。) (4)オブジェクトが変数を参照すること いまのところこの言い方はしないようにしましょう。 (5)変数がオブジェクトを束縛すること さしあたってこれも避けます。 これは(1)の意味で使うことを避けるというのいうのと、 変数 var がオブジェクト obj1 に束縛され、obj1 が obj2 を参照しているとき、変数 var は obj2 にも束縛されてい る、言うのも避けるという意味です。このとき var は obj2 も(間接的に)参照している、と言うのはいいでしょう。 (6)オブジェクトがオブジェクトを束縛すること これもさしあたって使わない方がいいのではないでしょうか。 いまのところこのぐらいです。で、束縛はかなりテクニカルターム であって定義の問題ですが、日常語に近い「参照」あるいは「参照 する」という言葉についてどう使うかについて議論がいろいろ出て います。私は、 (A)「参照」という言葉をいったん禁止、「参照する」という言 葉を許し、「参照することを」改めて「参照」と呼んでもよいこと にする。 という案を持っていたのですが、gotoken さんからは、 (B)「参照している」という言葉は禁止、「参照した」というの を許す。 という案が出ています。違う?(^^; 後、式を評価した「値」という言葉をオブジェクトへの「参照」と とるか、オブジェクトそのものととるかという大問題も残っていま す。