Ruby代码中puts @visited.inspect无输出问题排查求助
问题分析与解决
首先,你的代码里根本没进入输出语句所在的分支,原因是grid中的元素是字符串"1",但判断条件写的是grid[i][j] == 1(整数),两者永远不相等,所以if块里的代码完全没执行,自然看不到@visited的输出。
修复输出问题
把判断条件里的整数1改成字符串"1",修改后的代码片段:
if grid[i][j] == "1" && !@visited.include?([i,j]) @visited << [i,j] puts @visited.inspect total_sum << bfs([i,j]) end
另外要确保你已经实现了bfs方法,否则代码执行到这里会报错。
调试工具与技巧
- 基础输出调试:除了
puts,可以用p方法(会自动调用inspect),比如p @visited,输出更简洁直观;也可以在关键节点打印变量值,比如先打印grid[i][j]的类型和值,确认判断逻辑是否正确:p "当前元素:#{grid[i][j]},类型:#{grid[i][j].class}"。 - 使用
binding.pry:这是Ruby最常用的调试工具,先安装prygem(gem install pry),然后在代码中需要调试的位置插入binding.pry,程序运行到这里会暂停,你可以在交互式环境中查看@visited、i、j等变量的值,甚至执行代码片段。比如:if grid[i][j] == "1" && !@visited.include?([i,j]) binding.pry # 程序会在这里暂停 @visited << [i,j] total_sum << bfs([i,j]) end - Ruby内置调试器:Ruby 2.5+自带
debug库,不需要额外安装,在代码开头加require "debug",然后在需要断点的地方写debugger,运行代码后会进入调试会话,支持查看变量、单步执行等操作。
内容的提问来源于stack exchange,提问作者Ivan Ordonez
相关产品推荐
相关产品推荐

