RubyAlgorithmsTest.rb:31:in `+': no implicit conversion of Array into String (TypeError)
from RubyAlgorithmsTest.rb:31:in `block in get_dependencies'
from RubyAlgorithmsTest.rb:29:in `each'
from RubyAlgorithmsTest.rb:29:in `get_dependencies'
from RubyAlgorithmsTest.rb:81:in `read_file'
from RubyAlgorithmsTest.rb:90:in `<main>'
我是Ruby编程的新手,我想知道如何解读上面显示的错误堆栈。我不知道如何判断错误首先出现在哪一行。我是按时间顺序读取堆栈的吗?这是代码的GitHub仓库:https://github.com/jeffreyyong/RubyAlgorithmsTest/
答案 0 :(得分:3)
错误发生在第31行。这几乎总是正确的,但有时候实际问题会在其他地方发生,Ruby会在以后抱怨它。这在语法错误中更常见(例如,缺少结束块)。下一个线索是+
,所以寻找你在做什么。看起来您正在尝试将Array连接到不允许的String。
堆栈跟踪的其余部分告诉您如何使用该行代码。因此,称为第28行的第90行称为第31行。
此时您有几个选择。您可以在第31行上方放置一些puts dependencies.inspect
和puts found_dependency.inspect
并查看其内容。
或者您可以使用像Pry这样的工具(强烈推荐!)并暂停程序以检查它。要做到这一点,你需要:
在ruby文件的顶部添加以下两行:
要求'rubygems' 要求'撬'
在第31行上方添加第binding.pry
行
当Ruby到达binding.pry行时,它将打开一个IRB(技术上是Pry,但同样的东西)提示,你可以在那里检查代码。
因此,您只需键入dependencies.class
之类的内容即可返回结果。非常适合在那个位置搜索你的数据并弄清楚出了什么问题。