_ 特殊変数のスコープ (この記事はRuby Advent Calendar 2018の参加記事です。) Rubyはシンプルな文法が特長である。 Rubyには特殊変数と呼ばれる変数があって、見た目はグローバル変数だが、$_ や $& などの一部の変数はローカル変数に似たスコープを持っている。「似た」というのは厳密には違いがあって、基本的にブロックローカルではなくメソッドローカルなのだが、スレッドのブロックではスレッド毎に固有の値を持つ。 t = Thread.start { Thread.current.name = "sub" $_ = "foo" 5.times do puts "#{Thread.current.name}: #$_" #=> 5回とも「sub: foo」と出力 sleep(0.1) end } Thread.current.name = "main" $_ = "b