From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-07-29T07:11:52+09:00 Subject: [ruby-dev:7] Re: eval with dynamic binding [Re: meta programming features] けいじゅ@今はフリー(^^;;;です. In [ruby-dev :00004 ] the message: "[ruby-dev:4] Re: eval with dynamic binding [Re: meta programming features] ", on Jul/29 00:08(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >|{ >| int foo; >| int bar; >| { >| int foo; >| bar; >| } >|} >ちょっとわかりませんでした. rubyでの, {|foo|...} の fooはローカル変数の宣言に見えたってことでした. # 上のCのfooと似ているでしょ. >|binding.type とすると Data になりますね. Dataって何ですか? クラスじゃ >|ないですよね. > >いちおうクラスですよ.Cのポインタをラップする時に使われる >ruby的にはなんの働きもしないクラスですが. なるなる. 一応クラスなんですか... ドキュメントには載っていませんが. >| new_binding = eval "proc{|a| a = 'Foo'}", old_binding > >old_bindingでローカル変数aが使われていないといなければ動的ロー >カル変数aを追加しますが,既に使われていればそのローカル変数 >(おそらくはどこかのスコープで共有している)の値を変更します. > >こういう動作をするんじゃ,動的ローカル変数を追加するとは呼べ >ないのでは? やっと分かりました. 確かに``上で''話してありました!! 一般のeval路線でローカル変数をうまく追加するのは, 難しいのですかねえ... やはりそうなると, lispのback-quoteやmake_symbolみたいな路線しかないん ですかね?? foo = Foo.new # non string object eval "bar = `foo`" さらに barをローカルにしたければ, foo = Foo.new # non string object bar = make_symbol :bar eval "set `bar`, `foo`" make_symbolは欲しい機能ではあるど, back-quoteは難しそう... __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---