From: Take_tk Date: 2003-08-31T23:21:00+09:00 Subject: [ruby-list:38309] Re: 配列における「変数のモデル」 たけ(tk)です。 [ruby-list:38308] Re: 配列における「変数のモデル」 にて Kenta MURATA さん 曰く: > > G:\DOWNLOAD\ruby-1.8.0-20030404-i386-mswin32\bin>ruby -e "a='a';p a;a<<'b';p a" > > > > "a" > > "ab" > > これは,変数の値が変化してるわけではなく,オブジェクトの中身が > 変化しただけですね.  あらら、ほんとだ。『Ruby本』p.44に「Rubyにおける変数や式の「値」とはオ ブジェクト空間に存在するあるオブジェクトのことだと考えることができます」 とありますね。 --ruby a = "foo" b = "foo" p a == b #=> true -- は「値の内容は同じだが、値は異なる」と言わなければいけないんですね。  前の文章の中の「変数の値」は「変数の値の内容」と読み替えてくださいませ。 (5−1)変数の値の内容が変わる、といっても、代入によって変数が指し示し ているオブジェクトが入れ替わる場合と、破壊的メソッドによって変数が指し示 しているオブジェクトの状態が変わる場合とがある。 * ということは…。Fixnumやシンボルの場合には「値が同じ」になる。むずい。 --ruby a = :foo b = :foo p a == b #=> true … 値が同じ a = "foo" b = "foo" p a == b #=> true … 値の内容は同じだが、値は異なる a = 123456789 b = 123456789 p a == b #=> true … 値が同じ a = 1234567890 b = 1234567890 p a == b #=> true … 値の内容は同じだが、値は異なる --  『Rubyの冒険』は大丈夫かな?…p.70「変数に入っているオブジェクトを『変 数の値』という」、p.210「(共有状態にある変数の一方で破壊的メソッドを使 うと)変数s7で操作したにもかかわらず、変数s6の内容も変わる」…箱モデルに は異論があるだろうが、定義や用語の使い方には問題はなさそうだ。ほっ。 > id はアドレスと考えても差し支えないとは思いますが,それと > (6-1) の内容とは関係あるのでしょうか?あまり関連性を感じないの > ですが.  えっとー。次の発言の趣旨がよく読み取れなかったのです。リテラルの話でな いとすると、オブジェクトを配列から取り出してブロック引数の変数iに入れて いる部分のこと? > > (6−1)オブジェクトは直接扱うことはできない。オブジェクトを変数から > > 「取り出す」ことは出来ない。 > > オブジェクトを直接扱う事もできますよ. > > [ 1, 2, 3, 4, 5 ].each{|i| ... } > > とかできますから.  リテラルを通してオブジェクトを扱うことがオブジェクトを直接扱うことにな るという趣旨ですか?  リテラルが「プログラム中に直接登場するオブジェクト」であればそういう結 論になる。  しかし、リテラルが「オブジェクト空間に存在するオブジェクトを指し示すも の」であれば、リテラルでオブジェクトを扱うことは、オブジェクトを直接扱う ことではなく、リテラルを通してオブジェクト空間にあるオブジェクトを扱うこ とになる。 take_tk = kumagai hidetake