У меня точно такой же вопрос, как у "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)>