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

yarv-dev:411

From: Nobuyoshi Nakada <nobu.nokada softhome.net>
Date: Sun, 30 Jan 2005 10:28:57 +0900
Subject: [yarv-dev:411] Re: special local variables

なかだです。

At Tue, 25 Jan 2005 17:28:40 +0900,
SASADA Koichi wrote:
> 	def getproc
> 	  /abc/ =~ 'abc'
> 	  $pr = proc{
> 	    p $~
> 	  }
> 	  proc{
> 	    /123/ =~ '123'
> 	  }
> 	end
> 
> 	pr1 = getproc
> 	pr2 = proc{
> 	  /123/ =~ '123'
> 	  p $~
> 	}
> 
> 
> 	Thread.new{
> 	  $pr.call
> 	  pr1.call
> 	  $pr.call
> 	  p $~
> 	  pr2.call
> 	  p $~
> 	}.join
> 	#=>
> 	#<MatchData:0x2ac66b8> # 他スレッドで作成した $~ が見れる
> 	#<MatchData:0x2ac6550> # 自スレッドで作成した $~ が見れる
> 	nil
> 	#<MatchData:0x2ac64c0> 
> 	nil # なんでだろー?   # 自スレッドで作成した $~ が見れない

どれもThread.mainで作成されたMatchDataです。Procが保持するコン
テキストにはスレッドも含まれるので、pr2.callで作られた$~は元の
スレッドとは異なる呼び出し元のスレッドからは見えない、というこ
とです。

>  完全にスレッドローカルかつメソッド(クラス)ローカルな変数に
> するのはどうでしょうか.

ということで、一応はなっていると思いますが。

>  また,現在の実装では並列にインタプリタを走らせられないよう
> な気がします.

これはまぁ、他の諸々の部分と同じく。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

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

       409 2005-01-25 17:28 [ko1 atdot.net       ] special local variables                 
       410 2005-01-25 17:42 ┣[matz ruby-lang.org  ]                                       
->     411 2005-01-30 10:28 ┗[nobu.nokada softhome]                                       
       426 2005-02-23 14:53  ┗[ko1 atdot.net       ]                                     
       455 2005-03-09 09:25   ┗[matz ruby-lang.org  ]