2016-10-09 9 views
0
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/Rubyでの適切なデバッグ方法

+0

実際のエラーは最初の行にあります。残りの行は、実行中のプログラムの呼び出しスタックです。それはRubyがそこにいかにあるかを教えてくれる。 'RubyAlgorithmsTest.rb'の31行目にエラーがあります。 ArrayクラスをStringクラスに追加しようとしています。 – Casper

答えて

3

エラーは31行目で発生しました。これはほとんどの場合当てはまりますが、実際の問題が他の場所で発生し、Rubyが後でそれについて不平を言うことがあります。これは、構文エラー(例えば、エンドブロックがないなど)でより一般的です。次の手がかりは+なので、あなたがそれをやっている場所を探してください。あなたが許可されていないStringにArrayを連結しようとしているようです。

残りのスタックトレースは、そのコード行にどのように到達したかを示しています。したがって、ライン90はライン29と呼ばれるライン81と呼ばれるライン31と呼ばれます。

この時点でいくつかのオプションがあります。 puts dependencies.inspectputs found_dependency.inspectを31行目の上に置き、その内容を確認することができます。

また、Pry(強くお勧めします)のようなツールを使用して、プログラムを一時停止して検査することもできます。これを行うには以下を行う必要があります。

が必要「RubyGemsの」 必要てこ」:

  1. は、次の2行を追加するには、ルビーのファイルの先頭に
  2. 「プライをインストール宝石」を介して宝石をインストールします。 「ジャストライン31上の

  3. binding.pry

  4. 今すぐ通常のようなプログラムを実行行を追加します。

Rubyがあなたのbinding.pry行に来ると、IRB(技術的にはPryですが、同じ種類のもの)のプロンプトが表示され、そこでコードを直接調べることができます。

dependencies.classのように入力すれば、結果が返されます。その場であなたのデータを突き止め、何が間違っているかを把握するのは素晴らしいことです。