ちわ、時田@2度目 です :-) From: Wakou Aoyama <wakou / fsinet.or.jp> Subject: [ruby-list:19094] Re: reference of object Date: Thu, 2 Dec 1999 02:02:58 +0900 > 青山です。 ども、今後ともよろしく(笑) > Hash でいいなら、Ruby ではこれでもいいですね。 …snip… > このややこしさに比較すれば、$$name 相当を eval(name) とするような程度 > は十分に許せるというか、見やすいので良いと感じます。 んーと、基本的に実行時に評価する evalって掟破りというか(^^; ま、使い方によっては script言語ならでわの 強力な武器なわけだけど これで データ構造を作ろうかって話になってくると、辛いものがあるん じゃないかと思うわけです。 いや、まてよ? Perlの $$name なんてのも、実行時に評価するんだよな? でなきゃおかしいな…(^^; んー?、まてまて? っつー事は、Perlの $$name も、rubyの eval(name)も書式の違いだけって事か… はー、自己完結(笑) でもやっぱり データを命名規則にしたがった変数に格納して、 欲しいデータの変数名を作って参照するよりも、 規則にしたがったデータ構造をつくって、 欲しいデータを直接いぢるほうが美しいと思うんだけどなぁ。 ま、これも場合によりけりか(^^; # inspectメソッドも、 #{}の中に eval(変数) した時の動作も # 知らなかったっす(^^; > ----- > (特に意味無し。やはり Ruby が好きといいたかっただけ? 各言語が値ベー > スとリファレンスベースである事を横に置いて話しているので、実は比較にも > なっていない。) んー、オンラインドキュメントのどこかをみて認識した事だとおもうのだけど 引数は値渡しになるのかと… いったいどこを見てそう思ったのだろう(^^; 過去ログの紐モデルだとか、そこら辺を流して見て eval.rbでテストして (私の)理解と実体を整合させました(^^; 私の方はこんな ruby初心者ですが(^^; 以下、過去ログとかみて 青山さんが rubyや perlその他諸々に精通して いるんだとわかった上で…(^^; > $object_a = "Hello world!\n"; > $object_name = "object_a"; > %object = (); > $object{$object_name} = $object_a; > print $object{$object_name}; > > この場合、$object_a の内容をコピーして保持していくため、候補が増えて行 > くと %object が肥大していくという問題が。 で、その理解と、昔取った杵柄の perl(もう何年も使ってない(^^;)によると コピーして保持していくのは $object_a じゃなくて "Hello world!\n"(そして "object_a") だと思うのですが つまり %object = { "object_a"->"Hello world!\n" } って感じのオブジェクトをコピーして生成すると… (perl使ってたの3年くらい前だから、表記とか間違ってたらすいません) で、このコピー元の文字列って(この場合)元々ソースのスクリプトに含まれて いるんだから、%objectが肥大していくといっても、せいぜい2倍必要になる って事ですよね。 # rubyなら、メモリに読込まれたスクリプト中の文字列データを直接参照してて # perlなら、それを一旦コピーして使うって感じでしょうか (もちろんソースの組み方によっちゃ、いくらでもメモリ使用量は 増やせるんだけど(^^;) # C なら ptr = "Hello world!\n" で、 "Hello world!\n"って文字列が # オブジェクトのデータ領域にあって、ptrはそれを指してるだけ ってのと # 同じイメージ スクリプトソースが実際問題何Mもあるようなことは あまりなくて コピー元はデータファイルとかに入っている場合が多いわけで 読込みバッファを同じだけ取るなら、perlでも rubyでも 必要なメモリは そのデータファイル(中の必要データ)のサイズ分と、必要ならインデックス等の分 メモリが必要になってくるわけで データ比較や、テーブル検索なんかは どちら(rubyも perl)も アルゴリズム的に洗練されているのだろうと思うので たいした違いじゃ ないと思うんですよね。 むしろ、大きな違いは 代入をする時(比較データの設定とか)に、 書式として楽な方法を選択すると、バッファコピーのおこる頻度が rubyの方が少ないって事ですかね。 って認識で正しいでしょうか? # 結局これが言いたかった(^^;;;; # 最後のコメントの 「特に意味なし〜」で そーいう事(書式として楽な云々… # を含めた色々なこと)をいいたかったのだとも受け取れる :-) -- 時田幸粋 E-mail: ktokita / ma.neweb.ne.jp URL : http://www1.neweb.ne.jp/wa/ktokita