PStore

PStore#commit 、 PStore#abort でブロックを抜けるのはどうやってやってるんだろうと思ってソースを見てみた。catch を使ってやってるのね。

class Sample
  def test
    catch(:exit) {
      yield
    }
  end
  def commit
    throw :exit
  end
end

s = Sample.new
s.test {
  puts "1"
  s.commit
  puts "2"
}

#=> 1 しか出力されない

ちなみに pstore.rb のインデントがずれてたのは何故!?