[前][次][番号順一覧][スレッド一覧][生データ]

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  ]