From: Hiroyuki Iwatsuki Date: 2006-05-23T15:47:54+09:00 Subject: [ruby-list:42256] Re: File objectがいつのまにか nilに、 岩月と申します。 6行目の時点では ofp は定義されていないため、 例外が発生します。ですので、たとえば ofile = "" の次の行にでも ofp = nil と書いておきましょう。 ofile = "" ofp = nil alist.each{|file| (以下略) 今回の問題を再現するために別のコードを書きました。 flag = false 2.times do |count| p(count, local_variables) flag && p(ivar) # 2周目に例外が発生する ivar = 123 flag = true end 処理の流れだけを見ると、一回目のループの中で ivar = 123 が あるから、二回目のループの p(ivar) は動きそうな気もしますが、 実際には同様の例外が発生します。 0 ["flag", "ivar", "count"] 1 ["flag", "ivar", "count"] ivar_scope.rb:4: undefined local variable or method `ivar' for main:Object (NameError) from ivar_scope.rb:2 ちゃんと調べたわけではないので自信ありませんが、 1周目の最後で ivar = 123 として定義されたローカル変数が、 2周目の冒頭では無かったことにされているんじゃないかなあと 予想してます。つまり # まだ ivar は存在しない ivar = 123 # ivar はあるよ という感じではないかと。 ただ、local_variables でローカル変数を見ると ivar = 123 より以前でも ivar があるようにも見えます。この辺はちゃんと理解していないので わかりません。 -- IWATSUKI Hiroyuki