Rubyのエラーメッセージundefined methodの解決方法【初心者向け】
初心者向けにRubyのエラーメッセージundefined methodの解決方法について解説しています。ここではundefined methodが出る原因と対処法、実際に起こりがちな状況について見ていきます。いくつかの例を見ながら解決法を覚えましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
Rubyのエラーメッセージundefined methodの解決方法について解説します。
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。
今回は、Rubyに関する内容だね!
どういう内容でしょうか?
エラーメッセージundefined methodの解決方法について詳しく説明していくね!
お願いします!
エラーメッセージundefined methodが現れる原因
プログラミングはエラーをどう読み取りそれをどうやって解決していくのかが、上達のポイントです。今回はそんな中で、よく目にする
undefined method
がでる原因を紹介したいと思います。
訳しても理解できると思いますが
“定義されていない”
ということが大前提であります。一番の原因はなんといっても
“スペルミス“とレシバーが”nil“の場合です。
以下からその読み解き方と解決方法を紹介していきます。
エラーメッセージundefined methodの解決方法
スペルミスでよくある方法です。
p "Ruby".lenght #=> undefined method `lenght' for "Ruby":String (NoMethodError)
こちらを訳してみますと
“RubyのStringクラスにおいてはlenghtというメソッドは定義されておりません。”
つまりlenghtが間違っているということであります。
この場合はスペルミスを疑いましょう。よーく見ると、lenghtではなくlenghtですよね。こういうスペルミスは開発現場でもよくあることです^^;
次に
put "Ruby" #=> undefined method `put' for main:Object (NoMethodError)
putなんていうメソッドはObjectのmainにないですよ!!
と出ています。難しく考えずにputというメソッドがないと言っているのも同じですから、putに問題があるとまず疑います。
これもスペルミスですね。putではなくputsです。
最後ですが、こちらがちょっとややこしいです。
a = ["orange", "apple"] p a[0].length p a[1].length p a[2].length #=> 6 #=>5 #=> undefined method `length' for nil:NilClass (NoMethodError)
と出るかと思います。
“orange”の文字数は6と”apple”の文字数は5と出ますが
a[2]はnilです。何も入っておりません。
レシーバーが何もないのに、この文字数を返すメソッドlengthを書いても、何もない(NilClass)にlengthメソッドは使えませんよ!!
となるわけであります。
この場合は
a = ["orange", "apple", "melon"]
と、a[2]に入る要素を追加すれば、nilではなくなるので
p a[2]
としてもエラーが出ずに表示されることとなります。このようにして、解決していくとエラーの読み取りも上達していくかと思います。
筆者プロフィール
町田 耕
学生時代は会計学専攻。塾講師勤務を経て、企業のCFOとして会社経営に携わる。 会社経営から一線を退いた後、インフラエンジニアの妻の勧めでプログラミングを 独学で始め、プログラミングセミナーなど転々としながら、開発案件に携わるようになる。 現在、フリーランスとして活動しながらテックアカデミーのメンターも勤めている。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。