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 ]