Ruby/lib/time.rb的线程安全性如何?
在查看RSS stdlib monkey修补时间类时,我发现全局变量Ruby/lib/time.rb的线程安全性如何?,ruby,datetime,thread-safety,global-variables,standard-library,Ruby,Datetime,Thread Safety,Global Variables,Standard Library,在查看RSS stdlib monkey修补时间类时,我发现全局变量$1$2$3。。。在那里被大量使用。好吧,我可以不同时制作几个RSS提要而生活 但我在这里发现了同样的恐怖: -/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/Ruby/2.0.0//time.rb 这里: - Ruby/lib/time.rb如何在没有线程错误的情况下工作 $1、$2等是特殊的全局变量,它们保存正则表达式匹配结果,并且在内部是一个变量
$1
$2
$3
。。。在那里被大量使用。好吧,我可以不同时制作几个RSS提要而生活
但我在这里发现了同样的恐怖:
-/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/Ruby/2.0.0//time.rb
这里:
-
Ruby/lib/time.rb
如何在没有线程错误的情况下工作 $1
、$2
等是特殊的全局变量,它们保存正则表达式匹配结果,并且在内部是一个变量,因此,使用它们的代码是线程安全的
这是一段摘自
特殊全局变量
模式匹配设置一些全局变量:
- $~相当于::last_匹配李>
- $&包含完整的匹配文本李>
- $`在匹配之前包含字符串李>
- $包含匹配后的字符串李>
- $1、$2等包含文本匹配第一、第二等捕获组强>
- $+包含最后一个捕获组
这些全局变量是线程局部变量和方法局部变量。
示例如下:
Thread.new {
"A B C".match(/(\w)/)
p $1 # Prints "A"
Thread.new {
"X Y Z".match(/(\w)/)
p $1 # Prints X
}.join
p $1 # Prints "A", shows that $1 was not corrupted by inner thread
}.join