yarv-dev:662
From: Yukihiro Matsumoto <matz ruby-lang.org>
Date: Wed, 05 Oct 2005 18:26:01 +0900
Subject: [yarv-dev:662] Re: environment in eval
まつもと ゆきひろです In message "Re: [yarv-dev:661] Re: environment in eval" on Wed, 05 Oct 2005 18:03:24 +0900, SASADA Koichi <ko1 atdot.net> writes: |http://www.rubyist.net/~matz/20031023.html#p02 |> eval内で新規に登場したローカル変数はeval終了後消える | |これは, | |「ただし,その eval 実行時に利用した Binding オブジェクトにはローカル変 |数が残る」という付則付き,ということでしょうか.私は「終了後消える.どこ |にも残らない」と読んでいました. あ、すいません。どちらにも解釈できますよね。私の思いは前者で した。が、それは現状の実装に引きずられすぎているのかもしれま せん。確かにevalでローカル変数が残らない新実装にあっては bindingにも残らないとするのがきれいなのかなあ。 でも、そうしないと名前空間が汚れる(今回の例だとbという変数が 見えてしまう)上に、その変数を書き換えてしまうことで変な動作 を起こせてしまうわけですよね。とすると、Bindingに残るとした 方が使いやすさからは上ということになりそうな。 # すいません。確定的な結論でなくて。 | binding の意味をイマイチわかっていないのですが,どこかに資料などありま |すか. 例によってないです。bingingはその時点でのクロージャのような ものだと思って実装してました。いや、実際現状のRubyではクロー ジャそのものなんですが。 | eval のバインディングの省略形は,eval(str, binding) の省略形だと思って |いたんですが,違うんですね. 現状はそうなんです。「evalで消える」という仕様を導入すると違っ た方が使い勝手がよさそうということですね。 | もう一つ確認なんですが, | |b = binding |eval('a=1', b) |eval('p a', b) # (1) 1 |eval('p local_variable', b) # (2) ["a"] | |であって, | |eval('a=1') |eval('p a') # (1) エラー |p local_variables # (2) [] | |なのでしょうか([yarv-dev:655] Re: environment in eval). そのつもりです。 | うまい実装の仕方が思いつかないのですが,考えてみます. | | まだまだ色々と誤解してそうです.難しい. ですねえ。 まつもと ゆきひろ /:|) -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
654 2005-10-05 15:42 [ko1 atdot.net ] environment in eval 655 2005-10-05 16:01 ┗[matz ruby-lang.org ] 656 2005-10-05 16:15 ┗[ko1 atdot.net ] 657 2005-10-05 16:36 ┗[matz ruby-lang.org ] 658 2005-10-05 16:48 ┗[ko1 atdot.net ] 660 2005-10-05 17:50 ┗[matz ruby-lang.org ] 661 2005-10-05 18:03 ┗[ko1 atdot.net ] -> 662 2005-10-05 18:26 ┗[matz ruby-lang.org ] 663 2005-10-06 11:52 ┗[ko1 atdot.net ] 664 2005-10-07 16:45 ┗[matz ruby-lang.org ] 665 2005-10-07 17:03 ┗[ko1 atdot.net ] 666 2005-10-07 17:15 ┗[usa garbagecollect.j] 667 2005-10-07 17:19 ┗[matz ruby-lang.org ] 668 2005-10-07 20:45 ┣[ko1 atdot.net ] 669 2005-10-07 21:51 ┃┗[shiro lava.net ] 670 2005-10-07 23:34 ┗[nobu.nokada softhome] 671 2005-10-08 00:40 ┗[matz ruby-lang.org ]