LoginSignup
1
0

More than 3 years have passed since last update.

Rubyの文法エラーと対策

Last updated at Posted at 2020-09-06

備忘録の最たる例として、遭遇したエラーと解決方法を書いていく。

①構文がおかしいよ?[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
    )
main2.rb(間違ってるコード)
super(
      name: params[:name]
      hp: params[:hp]
      offense: params[:offense]
      defense: params[:defense]
    )
main2.rb(修正したコード)
super(
      name: params[:name],
      hp: params[:hp],
      offense: params[:offense],
      defense: params[:defense]
    )

原因はsuperメソッド内の各項目が「,」で区切られておらず、全て同じ行扱いになっていたが為に怒られた。

尚、superメソッドは、実行しているメソッドがオーバーライドしているメソッドを呼び出します。オーバーライドとは「親クラスのメソッドを子クラスで上書きすること」です。
initializeメソッド中でsuperを使うことにより、指定クラスのinitializeメソッドを実行することが可能。結果、「共通している部分」と「共通していない部分」で処理を振り分けることができる。

②そんな名前は存じません!uninitialized constant (NameError)

main.rb
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の閉じ忘れの可能性もあり。インデントの位置も注意してみよう。

以下はエラーに遭遇、解決したら追記していく。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0