From: Kenta MURATA Date: 2003-08-31T23:54:40+09:00 Subject: [ruby-list:38310] Re: 配列における「変数のモデル」 むらけんです. In message <20030831221324.9E86.GGB03124@nifty.ne.jp> at Sun, 31 Aug 2003 23:21:00 +0900, Take_tk wrote: >  あらら、ほんとだ。『Ruby本』p.44に「Rubyにおける変数や式の「値」とはオ > ブジェクト空間に存在するあるオブジェクトのことだと考えることができます」 > とありますね。 Ruby本が「値」といっているものは,オブジェクトそのものの事でしょ う.僕が先のメールで使った「値」という言葉は,Ruby本での「値」 ではなく,たけ(tk)さんの「値」です. たけ(tk)さんが言う「値」と,Ruby本の「値」は本質的に違うものを 指してると思います.ですから,Ruby本の用語と直接対比することに あまり意味があるとは感じられません. > --ruby > a = "foo" > b = "foo" > p a == b #=> true > -- > > は「値の内容は同じだが、値は異なる」と言わなければいけないんですね。 そう言って理解してもらえるとは思えないのです.ここは,「オブジェ クト同士は等価だが,全く別のオブジェクトである」と言う方が僕に は分かりやすいですね. > (5−1)変数の値の内容が変わる、といっても、代入によって変数が指し示し > ているオブジェクトが入れ替わる場合と、破壊的メソッドによって変数が指し示 > しているオブジェクトの状態が変わる場合とがある。 > > * ということは…。Fixnumやシンボルの場合には「値が同じ」になる。むずい。 Fixnum と Symbol は,そのように定義されたクラスとして特別扱い して良いのではないですか? これら以外にも例えば,Singleton パ ターンを適用したクラスを定義すれば,インスタンスを生成しても, ただひとつの特定のオブジェクトしか得られないようにすることも可 能ですよね. >  えっとー。次の発言の趣旨がよく読み取れなかったのです。リテラルの話でな > いとすると、オブジェクトを配列から取り出してブロック引数の変数iに入れて > いる部分のこと? > > > > (6−1)オブジェクトは直接扱うことはできない。オブジェクトを変数から > > > 「取り出す」ことは出来ない。 > > > > オブジェクトを直接扱う事もできますよ. > > > > [ 1, 2, 3, 4, 5 ].each{|i| ... } > > > > とかできますから. いえ,違います.配列そのものに each を送ってる部分です. >  リテラルを通してオブジェクトを扱うことがオブジェクトを直接扱うことにな > るという趣旨ですか? そういう主旨で言いました. >  しかし、リテラルが「オブジェクト空間に存在するオブジェクトを指し示すも > の」であれば、リテラルでオブジェクトを扱うことは、オブジェクトを直接扱う > ことではなく、リテラルを通してオブジェクト空間にあるオブジェクトを扱うこ > とになる。 オブジェクト空間を持ち出す議論になるのでしたら,もうちょっとだ け掘り下げれば,「リテラル」も「変数の使用」もどちらも「式」で すから,式を評価した結果のオブジェクトを操作している事になりま せんか? ただ,どのように分かりやすく解説するかを議論していたはずなので, こんな解説ではダメですよね. # 僕は,[ruby-list:38207] で出て来た「杭」を用いた比喩が,色々 # な要素を同時に含んでいて,良い比喩だと感じました. -- 1024D/2A3FDBE6 2001-08-26 Kenta MURATA (muraken) Key fingerprint = 622A 61D3 280F 4991 4833 5724 8E2D C5E1 2A3F DBE6