#変数名の後に何かくっつけてみたらエラーでた!
っていう人向けの記事です。初心者向けです
自分のところで出てるエラーは
NoMethodError: undefined method all?' for "":String だったり NoMethodError: private method
select' called for "":String
これのデバッグの仕方の一つの例です
なぜか失敗する
if str.all?
puts "空白がありませんでした"
end
=>NoMethodError: undefined method 'all?' for "":String
Ruby初心者だった自分が陥ったときは NoMethodErrorとか言ってるけどall?ってメソッドはあるじゃないか!リファレンスに書いてあるぞ!ってなってだいぶ迷いました
#デバッグ方法
#まず、putsでstrの中身を確認してください。変数は期待しているものになっていますか?
puts str
=> ""
#変数の中身何も入ってない!もっと前の行で間違えてるのが分かる
#変数の型はメソッドと同じですか?
puts str.class #strのクラスを確認
=> String
#strはString型になっている。 all?はArray型に使えるメソッドだからエラーが起きていることがわかる
後者の方で間違えやすく、デバッグに時間がかかったりします。このようなエラーがでてきたら使ってるメソッドと変数の型が一致しているのかを見てあげてください
リファレンス→https://docs.ruby-lang.org/ja/search/
あ、これ配列に使えるメソッドだからStringに使えないのかって分かると思います
インターンでコード書いてるなかでよくあったのが
Article.first
=>NoMethodError: undefined method 'first' for Article:Module
#とか書いてあってclassみてみたら
Article.class
=>Module #ってでてきて、お前さんモジュールだったのか...
みたいなこともありました
ここまで見てきて、勘のいい人だったらclass使わなくても
エラー文見たら最後にModuleとかStringとかでてきてるじゃん!ってわかると思います。