gem pryを掘る(watch)

Rubyデバッグに便利なことで有名なgem pry に調べてみる

watch

監視したい値を watch <値> のようにして登録すると 値に更新があったときに教えてくれる

[5] pry(main)> a = 1
=> 1
[6] pry(main)> watch a
Watching a
watch: a => 1
[7] pry(main)> a
=> 1
[8] pry(main)> a += 1
watch: a => 2
=> 2

何かを実行するたびに監視対象を実行して、結果を調べてくれているらしい 試しにメソッドの結果を監視したら、毎回監視対象のメソッドが実行されてた

[2] pry(main)> def count
[2] pry(main)*   puts 'count invoked'
[2] pry(main)*   1
[2] pry(main)* end
=> :count
[3] pry(main)> watch count
Watching count
count invoked
watch: count => 1
[4] pry(main)> 1 + 1
count invoked
=> 2
[5] pry(main)> count
count invoked
count invoked
=> 1

裏で更新されているようなものについて監視できるんだろうか? 気になるので、Threadを起動して並列で更新してみたが更新を教えてくれなかった。 どうもpry上でなにか実行したときに値を確認して変わってたら教えてくれるだけらしい。