読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

未初期化変数とは

<スポンサーリンク>

●クラス変数
クラス変数は使う前に必ず値を代入する必要がある。
値が代入されていないクラス変数が参照されると、RubyはNameErrorを起こす。
見てみよう。

class Sample
	@@class_val

	def hoge_method
		puts @@class_val
	end
end

sample = Sample.new
sample.hoge_method

結果。

C:\example\ruby>ruby sample.rb
sample.rb:6:in `hoge_method': uninitialized class variable @@class_val in Sample
 (NameError)
        from sample.rb:11:in `<main>'

●インスタンス変数
初期化されていないインスタンス変数を参照すると、Rubyはnilを返す。


●グローバル変数
初期化されていないグローバル変数の扱いは未初期化インスタンス変数と同様で、nilと評価される。


●ローカル変数
ローカル変数は「@」みたいな、プレフィックス記号が定義されていないので、代入されていない場合はメソッドの呼び出しのように扱われる。
その名前のメソッドがない場合にはRubyはNameErrorを返す。

たとえば、こんな感じ

class Sample
	@@class_val = "default"

	def hoge_method
		var
	end

	def var
		puts "empty method"
	end
end

sample = Sample.new
sample.hoge_method #empty methodと表示される

このように、varというメソッドが定義されている場合は、empty methodと表示される。

varというメソッドをコメントアウトすると、NameErrorが表示される。

class Sample
	@@class_val = "default"

	def hoge_method
		var
	end

=begin
	def var
		puts "empty method"
	end
=end
end

sample = Sample.new
sample.hoge_method

結果。

C:\example\ruby>ruby sample.rb
sample.rb:6:in `hoge_method': undefined local variable or method `var' for #<Sam
ple:0x25d7e40> (NameError)
        from sample.rb:17:in `<main>'