質問: Ruby初心者のSEです。 仕事中に、「source.rb」というファイルだけを実行させようとしていたのですが、これのバックアップ用ファイルの名前を 「source_bkup.rb」にしたせいで、どちらのファイルも実行させてしまいました。 その後プロセスをkillし、「source_bkup.rb」の名前を「source.rb.bkup」に変更し、再度「source.rb」だけを 実行させたのですが、以下のエラーが出ました。 ``` error: 'undefined method `include?' for nil:NilClass' ``` 「source.rb」「source_bkup.rb」ともに、中で日付指定を行う箇所があるのですが、 上記のエラーは、「source.rb」で指定した日付が、間違って実行させた「source_bkup.rb」で指定した日付と同じ場合に表示されます。 いろいろ調べてみたのですが、原因がわかりません。 どうも「source_bkup.rb」で実行したときのプロセスか何かが残っているとしか思えず、Ubuntuを再起動させても解決しませんでした。 ちなみに、pstreeコマンドで見ると、 ``` ruby2.3 - ruby2.3 - ruby2.3 ``` のようになっていました。 2つの同様なファイルを、同じディレクトリに配置して実行させたせいで、includeの順番がおかしくなり、 「片方のプロセスが、次に同じ日付を指定して実行されるまで「待機状態みたいな形」で残ってしまっている」 というと伝わるでしょうか... 一度、この「待機状態みたいな形」で残っているプロセスを、PIDを指定してkillしたつもりですが、 まだどこかに残ってしまっている様子です。 Rubyの仕組みをわかっていないので、自分一人ではどうしようもありません。 長文であったり、言葉足らずで、かつ、プログラムがどういう動作をするのかも詳しく書いていませんが、 この問題の解決方法が分かる方がおられましたら、ご教授願います。 (質問などがあれば、回答します。 また、可能な範囲で、補足できるところは補足して説明したいと思います。)
回答: `include?`を呼んでいるオブジェクトをもう一度確認してみるのはどうでしょうか? ``` @fruits = nil @fruits.include?('apple') ``` これだと`nil`に対してはinclude?が実装されていないので、同じようなエラーになります。 ですので、`include?`を呼んでいるオブジェクトが`nil`になっていないか確認して見てください。 debugについてはpry-byebugを使うとそのオブジェクトがnilかどうかを実行しながら確認できますよ! ちなみに余談ですが、`include?`はArrayクラスに実装されていますね。公式Doc