From: matz@... (Yukihiro Matsumoto) Date: 1998-04-06T15:23:19+09:00 Subject: [ruby-dev:2071] Re: [Req] Binding.new まつもと ゆきひろです In message "[ruby-dev:2062] Re: [Req] Binding.new" on 98/04/05, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |実装上は, どうなっていようとも, proc内はローカル変数の空間は独立(いや |継承する)となっていますので, bindingのバグだと思うのですが? おかしいですね. #!/usr/local/bin/ruby p = proc{binding}.call p defined? foo eval "foo = 1", p p defined? foo p eval "defined? foo" を実行するとその実行結果は false false "local-variable" です.2番目のfalseを見る限り,仕様通りに「その場限り」という 動作をしているように見えます.石塚さんの状態を再現できるスク リプトを用意して頂けませんか? irb.rbの中ではなくて. |ついでに, リクエストしちゃいますが, Cにはブロックがありますよね? | proc { | ... | }.call | |とすればできるんですけど, 何か間抜けでしょ? そういうわけで, rubyにもあっ |ても良いと思うのですが? ええと「スコープはネストしない」というのはCLUから受け継いだ rubyの「哲学」です.イテレータブロック内の変数でちょっと例外 が出てますが,これを大々的に変えるつもりはないです.どうして もしたければ def block yield end block do ... end で実現できますし. |>うーん,やっぱり無理して独立したバインディングを用意しようと |>してるからではないかという気がして来ました.なんか場当たり的 |>な対応をするのではなく, | |だからこそ, 欲しかったんですけど(^^;;; いや,もっともっと根本からというつもりだったんです. まつもと ゆきひろ /:|)