フリップフロップ演算子にはいつも混乱する
http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0810c.html#D20081022-3
Rubyではブロックローカル変数は繰り返されるごとに初期化される、というだけかと。
>> ([true, false]*3).each{|b| x = "foo" if b; p x} "foo" nil "foo" nil "foo" nil => [true, false, true, false, true, false]
で、ここでのキモは (first=true)..false はフリップフロップ演算子なので、
ということですね。
それにしてもフリップフロップ演算子って現実的にどれぐらい使われているものなんですかね。使ったことないなあ。