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

yarv-dev:665

From: SASADA Koichi <ko1 atdot.net>
Date: Fri, 07 Oct 2005 17:03:25 +0900
Subject: [yarv-dev:665] Re: environment in eval

 ささだです.

Yukihiro Matsumoto wrote:
> まつもと ゆきひろです
> 
> In message "Re: [yarv-dev:663] Re: environment in eval"
>     on Thu, 06 Oct 2005 11:52:29 +0900, SASADA Koichi <ko1 atdot.net> writes:
> 
> |b = binding
> |eval('a=1', b)
> |eval('b=2', b)
> |eval('c=3', b)
> |
> |eval('p local_variables', b)
> |
> | という例で、a, b を定義した時点での環境が欲しい(c=3 はまだやっていな
> |い環境が欲しい)ということをしたい場合、残らない方法(笹田案)じゃないと
> |実現できない気がします。いや、これがしたいか、と言われるとイマイチですが。
> 
> そういう時にはbindingをdupするのではないでしょうか。

(上記例では b という変数が上書きされるので,binding は他の変数名に代入
されるとしてください)

 今,Binding#dup をやったら,アロケータがなくてエラーになりました.

ruby 1.9.0 (2005-08-15) [i386-mswin32]

binding.dup
#=> Exception `TypeError' at t.rb:1 - allocator undefined for Binding


Proc は dup 出来ました.ただし,環境は同じものを指しているような気がします.

a = 1
pr = lambda{
  b = 2
}

pr1 = pr.dup
pr2 = pr.dup

eval('c = 3', pr1)
eval('p local_variables', pr1) # ["a", "pr", "pr1", "pr2", "c"]
eval('p local_variables', pr2) # ["a", "pr", "pr1", "pr2", "c"]

-- 
// SASADA Koichi at atdot dot net
//


--
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  ]