From: Sako Date: 2003-08-25T01:31:59+09:00 Subject: [ruby-list:38219] Re: String  <<の動作につきまして 酒匂です。 At 00:45 03/08/25 +0900, 西 啓一朗 wrote: >読んでないレスがあることに気づいて、慌てて読み返し、思いっきり >後悔しています(^_^;) >まるっきりピエロだ…… まああまり恐縮しないで下さい。 もともと私も、たけさんの呼びかけ >次のような(初心者にとってはおそらく不可思議な)現象を、どのような言葉で >説明すれば、分かりやすく、かつ、比較的正確に理解してもらえるか、を一緒に >考えていただければ幸いです。 に、「面白そう」と思って横から勝手に割り込んだだけですので。 まあ私の説明もスコープなどについては全然触れていませんし、 まだまだ不完全ではあります。 皆で議論百出するところが面白いところですし、 勉強にもなります。 手前味噌で恐縮ですが、 自分の今回の説明を読み返して一つ面白いなと思ったところは、 「定数とは、一度オブジェクトに貼ると他のオブジェクトには 貼り替えにくい名札」というあたりでした。 Ruby だと文句を言いながらも、定数の名札をあるオブジェクトから 別のオブジェクトに貼り替えるのを許してくれますから、 「貼り替えにくい」なんて表現になっているのですが。 まあ全く許さない、となっていれば「定」数という「迫力」も 増していたかもしれませんが、私は今の仕様の方が実用上 は好みです。 ちなみに、ふなばさんも触れていたように、今回の話題は 昔別の ML でも出たことがありました。 そのとき私が書いたものは、以下のようなものです。 ここではスコープめいた話にも触れています。 それに比べると今回のものはあまり進歩はしていないのですが。 ------------------------------------------------------- ちょいと擬人化が過ぎるかもしれません。 #それに既に似たようなご意見も出ていたと思いますが。。。 * * * Ruby プログラムの中に現れる「変数」とはその場所で仕事をすすめる ために必要な「名札」に過ぎません。 ここでその名札が重要なのは、あくまでも使う側にとってであって、 「使われる側(オブジェクト)にはさしたる問題ではない」のが基本だと思います。 たとえば def sum (a, b) a.value + b.value end というメソッドがあるとします。 名札 a, b を用意して待っているのは sum というメソッド自身です。 sum は外から渡されてくるオブジェクトに対して、自分の仕事を 進めやすいように名札をつけます。渡されてくるオブジェクトが 外でどのような名前で呼ばれていたかはここでは関係ありませんし、 そのことを気にしたくありません。 このメソッドが呼ばれると、sum は a という名札をつけて入ってきたオブジェクト と b という名札をつけて入ってきたオブジェクトそれぞれに value という メソッドを投げかけて、その戻り値を加算 (+) します。加算された結果は メソッドの戻り値になります。 実は同一のオブジェクトが a, b 両方の名札を付けて入ってきたのかも しないのですが、sum にとっては実際にやってきたのが一人か、二人かは 問題ではありません。sum メソッドの中で 「a さん」と呼んで答えたオブジェクト、「b さん」 と呼んで答えたオブジェクトそれぞれに value メソッドの評価を 依頼するだけです。 ここでオブジェクトに付けられた名札は、あくまでもこのメソッドの中だけ で意味のあるものなので、sum メソッドが終了すると、名札も自動的に 消滅してしまいます。sum を呼び出した側のメソッドも、第一引数と して渡したオブジェクトが sum の中でどのような名前で呼ばれていたかを 知ることはできませんし、知る必要もありません。 もちろん名札によってはもっと広い範囲で通用するものもあります。 たとえば @sum というインスタンス変数を用意すると、この名札の 通用範囲はある特定のインスタンスの内部全域に広がります。 ただ、そうして適用範囲が広がったとしても、変数の名前はあくまでも使う側に とって意味があり、その名札を通して使われる側(オブジェクト自身)にとっては さして意味がないということを理解しておくことが大切です。 ----------------------------------------------------------------------- -- to design is human, design is our business http://www02.so-net.ne.jp/~sakoh/ mailto:sakoh@ba2.so-net.ne.jp Designers' Den Corporation : and for now, No Peace, No Future. -----------------------------------------------------------------------