2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Ruby】何度も繰り返してしまったエラー「undefined method `+' for nil:NilClass (NoMethodError)」

Posted at

概要

Ruby初心者の私が、ここ最近勉強中に何度も発生させてしまったエラーについて書きました。
難しいエラー内容ではないかと思いますが、なんか前もこのエラー出たな。。。となったので、備忘録として残すことにしました。

エラー再現コード

numbers = 1..5

numbers.each do |number|
  # 1~5まで順に足しあげながら繰り返し処理する
  sum += number
  puts sum
end

エラー内容

「+」 メソッドは、nilクラスに定義されていませんという意味のエラーメッセージ。

$ undefined method `+' for nil:NilClass (NoMethodError)

「-」の場合も発生しました。

$ undefined method `-' for nil:NilClass (NoMethodError)

原因と解決策

  • 原因
    eachメソッドのブロック内の変数sumを、メソッド外で定義していないため。

  • 解決策
    eachメソッド外部で、変数sumの初期値を0として定義してあげる。

numbers = 1..5
+ sum = 0

numbers.each do |number|
  # 1~5まで順に足しあげながら繰り返し処理する
  sum += number
  puts sum
end
実行結果.rb
1 # 0 + 1
3 # 1 + 2
6 # 3 + 3
10 # 以下省略
15

変数の定義が必要なら、ブロック内に記載すれば良いのではないか?と考えました。
しかしながら、その方法では繰り返し処理をする毎にsumが0になるため、足し上げ不可能となりました。

失敗.rb
numbers = 1..5

numbers.each do |number|
  # 1~5まで順に足しあげていく
  sum = 0
  sum += number
  puts sum
end
実行結果_失敗.rb
1
2
3
4
5

終わりに

eachメソッドに限らず、同じクラス内のメソッドにて足し上げ処理を書こうとした際、変数の定義・初期化のし忘れをしてしまい、今回と同様のエラーに再会しました…
その時に、あ〜これ前もやったやつだと気付き、無事解決することができました。
同じ状況になっている方の参考になれば幸いです。

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?