青山です。 On Wed, 1 Dec 1999 23:35:27 +0900, ktokita / ma.neweb.ne.jp wrote: > ruby> object_a="Hello world!\n" > ruby> object_name="object_a" > ruby> object={} > ruby> object[object_name]=object_a > ruby> print object[object_name] Hash でいいなら、Ruby ではこれでもいいですね。 しかし、逆に Perl で書き直すと、 $object_a = "Hello world!\n"; $object_name = "object_a"; %object = (); $object{$object_name} = $object_a; print $object{$object_name}; この場合、$object_a の内容をコピーして保持していくため、候補が増えて行 くと %object が肥大していくという問題が。 では、Ruby のようにリファレンスで書き直すと、 $object_a = \"Hello world!\n"; $object_name = \"object_a"; $object = {}; ${$object}{$$object_name} = $object_a; print ${${$object}{$$object_name}}; ちょっと(かなり)書きにくい(読みにくい)ですね。 $object_a = \"Hello world!\n"; $object_name = \"object_a"; $object = {}; $object->{$$object_name} = $object_a; print ${$object->{$$object_name}}; これだと多少ましでしょうか。しかし、Hash に -> 演算子というのもちょっ と変ですし(意味は同じなのですが)、元の Ruby の例には遠く及びません。 変数の頭の記号でデリファレンスできるのは2段階程度では便利そうに見えま すが、3段以上になってくると優先順位の {} 無しにはまともな動作をしなく なり、かえってややこしくなるようです。 このややこしさに比較すれば、$$name 相当を eval(name) とするような程度 は十分に許せるというか、見やすいので良いと感じます。 ----- (特に意味無し。やはり Ruby が好きといいたかっただけ? 各言語が値ベー スとリファレンスベースである事を横に置いて話しているので、実は比較にも なっていない。) -- 青山 和光 Wakou Aoyama <wakou / fsinet.or.j