[ruby-list:48705] Re: undefined method `+' for nil:NilClass (NoMethodError)

From: "y. nobuoka" <nobuoka@...>
Date: 2012-04-21 07:44:45 UTC
List: ruby-list #48705
初めまして、信岡です。

dxruby についてよく知らないので何か他の問題があるのかもしれませんが、
NoMethodError が発生するのは単純に変数のスコープの問題だと思います。

Ruby においては、メソッドの外で定義された局所変数はメソッドの中からは参照することが
出来ないので (ここ重要です)、4 行目の
 fpscnt = 0
として 0 で初期化している fpscnt という変数と、update というメソッドの中で
 fpscnt += 1
として使われている変数は別物です。
メソッド内の fpscnt は明示的な初期化がなく使われているので nil で初期化されます。
そして fpscnt += 1 の部分で nil に対して + メソッドを呼び出していることになるので、

> C:/Ruby193/scene_sample2.rb:15:in `update': undefined method `+' for nil:NilClass (NoMethodError)

というエラーが発生するのだと思います。
(局所変数のスコープについてのドキュメントを探してみましたがすぐには
見つかりませんでした。)

とりあえずグローバルに使える変数を使いたい、ということであれば、
変数名として fpscnt の代わりに $fpscnt を使うと良いかと思います。
Ruby では、"$" 記号ではじまる変数名はグローバル変数となります。

参考 : http://ruby-doc.org/docs/ProgrammingRuby/html/language.html#S3

-- 
信岡 ゆう (NOBUOKA Yu)

In This Thread

Prev Next