Как выполнить цикл с помощью PRY и просмотреть значение итератора в сеансе терминала?

У меня точно такой же вопрос, как у "j doe" (исходный вопрос здесь: Как выполнить цикл с pry и просмотреть значение итератор? ), хотя на самом деле на вопрос не было ответа. Я хочу попросить людей, которые на самом деле используют Pry для отладки, объяснить, как входить в циклы и оценивать выражения по мере их возникновения.

Я читал документацию, проверял файлы справки в терминале, смотрел YouTube, но, к сожалению, не понял. Пару раз мне удавалось "попасть в петлю" случайно, я думаю. Что я имею:

  • Я использую один рубиновый файл,
  • в моей системе я ранее устанавливал драгоценные камни byebug (8.2.1, 3.5.1, 3.4.0); pry (0.10.3, 0.10.1) и pry-rails (0.3.4, 0.3.2).
  • У меня есть require 'pry' в верхней части скрипта и
  • Я использую binding.pry для установки точек останова.

Это то, что я сделал в Терминале, используя пример из включенного вопроса. Я зашел так далеко, но каков мой следующий шаг? Как мне на самом деле сделать следующий шаг, чтобы пройти через цикл и увидеть значение переменной, которую я наблюдаю?

Last login: Thu Oct 20 18:21:07 on ttys000
INB:~ LearnEnough$ pry
[1] pry(main)> def longest_palindrome s
[1] pry(main)*   max_palindrome_len = 0
[1] pry(main)*   for i in (0..s.length)
[1] pry(main)*     binding.pry
[1] pry(main)*     for j in (i..s.length)
[1] pry(main)*       binding.pry
[1] pry(main)*       substr = s[i..j]
[1] pry(main)*       if substr == substr.reverse && substr.length >     max_palindrome_len

[1] pry(main)*         max_palindrome_len = substr.length
[1] pry(main)*       end
[1] pry(main)*     end
[1] pry(main)*   end
[1] pry(main)*   return max_palindrome_len
[1] pry(main)* end
=> :longest_palindrome
[2] pry(main)> longest_palindrome "racer"

From: (pry) @ line 4 Object#longest_palindrome:

     1: def longest_palindrome s
     2:   max_palindrome_len = 0
     3:   for i in (0..s.length)
 =>  4:     binding.pry
     5:     for j in (i..s.length)
     6:       binding.pry
     7:       substr = s[i..j]
     8:       if substr == substr.reverse && substr.length > max_palindrome_len
     9:         max_palindrome_len = substr.length
    10:       end
    11:     end
    12:   end
    13:   return max_palindrome_len
    14: end

[1] pry(main)> watch i
Watching i
watch: i => 0
[2] pry(main)> watch j
Watching j
watch: j => nil
[3] pry(main)>

person clonecq    schedule 21.10.2016    source источник


Ответы (1)


pry-debugger и pry-nav теперь не поддерживаются в Ruby, и они вам нужны для выполнения этих действий. Мне нужно использовать pry-byebug для этого.

Вот очень короткое и полезное видео о том, как использовать pry in loops:

https://youtu.be/dbllOus430c

person clonecq    schedule 22.10.2016