LoginSignup
19
15

More than 5 years have passed since last update.

ループ内で binding.pry を入れるときはちょっと条件を加えると幸せ

Posted at

ループの内部で binding.pry を使い処理を途中で止めたいとき

class FooController
  def index
    100.times do
      # なにか処理1
      binding.pry
      # なにか処理2
    end
  end
end

こうやって書くと finish, continue, exit などで処理を抜けたくても直後にまた次のループ評価でストップしてしまい、かなりうざい。

!!!, exit! などで脱出 -> ちょっと違う

!!!, exit! などで脱出してもいいけど、例外吐いて終わらせたいわけじゃなく、処理自体は続行して綺麗に終わって欲しい。

disable-pry で無効化 -> ちょっと違う

disable-pry コマンドを叩けばそれ以降は binding.pry で止まらなくなりますが、設定するとそれ以降ずっと有効なフラグなので今度は逆に止められなくて困ります。

条件をつければ良い

そんなときは、適当に binding.pry を評価する為の条件をつけてやるとちょっと幸せになれます。

class FooController
  def index
    100.times do
      # なにか処理1
      binding.pry unless @stop
      # なにか処理2
    end
  end
end

処理が止まって確認後、 finish, continue, exit などを叩く直前にこの場合なら @stop = true とかを実施してやれば次は binding.pry の条件が成立しないので止まりません。
条件はもちろん @stop じゃなくてもなんでもいいですが、適当な名前のインスタンス変数がいろんな箇所で記述しやすいと思います。
(該当箇所のインスタンスが繰り返し生成される場合は別)

19
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
15