備忘録の最たる例として、遭遇したエラーと解決方法を書いていく。
①構文がおかしいよ?[syntax error, unexpected tIDENTIFIER]
syntax error = 構文エラーなので、記述したコードの何処かが間違っていると怒られる。
下記コードはファイルをターミナルで出力した結果。
main2.rb:81: syntax error, unexpected tIDENTIFIER, expecting ')'
hp: params[:hp]
main2.rb:82: syntax error, unexpected ':', expecting end
offense: params[:offense]
main2.rb:83: syntax error, unexpected ':', expecting end
defense: params[:defense]
main2.rb:84: syntax error, unexpected ')', expecting end
)
super(
name: params[:name]
hp: params[:hp]
offense: params[:offense]
defense: params[:defense]
)
super(
name: params[:name],
hp: params[:hp],
offense: params[:offense],
defense: params[:defense]
)
原因はsuperメソッド内の各項目が「,」で区切られておらず、全て同じ行扱いになっていたが為に怒られた。
尚、superメソッドは、実行しているメソッドがオーバーライドしているメソッドを呼び出します。オーバーライドとは「親クラスのメソッドを子クラスで上書きすること」です。
initializeメソッド中でsuperを使うことにより、指定クラスのinitializeメソッドを実行することが可能。結果、「共通している部分」と「共通していない部分」で処理を振り分けることができる。
②そんな名前は存じません!uninitialized constant (NameError)
Traceback (most recent call last):
main.rb:1:in `<main>': uninitialized constant <class名> (NameError)
main.rbファイルの中にその様なclass名は無いと怒られています。
もし、別に切り分けているファイルを呼び出したくて起きたエラーならば、
下記の様にrequireを記述して別ファイルを呼び出せる様にしてあげましょう。
require './<class名>'
③必要な値を渡すんだぞ!ArgumentError
wrong number of arguments (given 1, expected 0) (ArgumentError)
引数エラーの場合に発生。
(given 1, expected 0) とあるように必要な値を一個渡してるけど、受け取り手がいないと怒られている。
そもそもの引数の記述し忘れてる可能性が高いから記述したメソッドのチェックをしてみよう。
④メソッドを定義しましょう!NoMethodError
monster.rb:51:in `transform': undefined method `transform_message' for #<Monster:0x00007fea761c2b28> (NoMethodError)
文字通り、メソッドが定義されてない事によるエラー。
単純にタイポが原因の可能性があるが、どこかのメソッドがdef〜endの閉じ忘れの可能性もあり。インデントの位置も注意してみよう。
以下はエラーに遭遇、解決したら追記していく。