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

yarv-dev:409

From: SASADA Koichi <ko1 atdot.net>
Date: Tue, 25 Jan 2005 17:28:40 +0900
Subject: [yarv-dev:409] special local variables

 ささだです.

 $~ とか $_ とかの話なのですが,現在の仕様(現在の実装の処理系
の結果を仕様とする)で決まりでしょうか.

 仕様が複雑になっているような気がします.ある場面ではスレッド
ローカルだったり,そうでなかったりしているようです.細かくよく
わかりません.


	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 # なんでだろー?   # 自スレッドで作成した $~ が見れない



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

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

 ブロックローカルなら話は簡単だけど,

	/(abc)/ =~ 'abc'
	3.times{|i|
	  ary << [i, $1]
	}

 みたいなことが出来なくなる.

 それとも,今の実装が不十分なだけ,と考えるべきでしょうか.


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

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