如何使用 pry 单步执行循环并查看迭代器的值?

How to step through a loop with pry and view the value of an iterator?

我将 binding.pry 插入到我的 Ruby 程序中,并试图在我的循环的每次迭代中查看迭代器的值:

require 'pry'

def longest_palindrome s
  max_palindrome_len = 0
  for i in (0..s.length)
    binding.pry
    for j in (i..s.length)
      binding.pry
      substr = s[i..j]
      if substr == substr.reverse && substr.length > max_palindrome_len
        max_palindrome_len = substr.length
      end
    end
  end
  return max_palindrome_len
end

longest_palindrome "racer"

我想在循环中的每次迭代中查看 ij 的值。

我确定我在这里遗漏了一些东西,但我无法从文档中找出要做什么。

您可以键入 p ip j 来手动检查它们。

虽然这会让我发疯,所以我会暂时插入 puts iputs j

不要将 for 循环与 Ruby 一起使用。相反,我们使用 eachuptodowntotimes,具体取决于我们的目的。此外,除非您强制代码提前退出,否则在方法末尾不需要显式 return 语句。

我会像这样编写您的代码:

require 'pry'

def longest_palindrome(s)
  max_palindrome_len = 0

  s.length.times do |i|
    binding.pry
    i.upto(s.length) do |j|
      binding.pry
      substr = s[i..j]
      if substr == substr.reverse && substr.length > max_palindrome_len
        max_palindrome_len = substr.length
      end
    end
  end

  max_palindrome_len
end

longest_palindrome "racer"