From: Masaaki Sakano Date: 2003-08-06T21:34:04+09:00 Subject: [ruby-list:38040] Re: undef variable 坂野 正明です。 At Wed, 6 Aug 2003 20:37:26 +0900, SAITO Shukaku wrote: > At Wed, 6 Aug 2003 20:12:38 +0900, > hirocy wrote: > > > > この foreach のスコープでしか使われない id が > > ずっと生きてしまうのが気持ち悪いんです.再利用もしたい. > > たとえ,nilを入れたとしても,スコープが生きてしまいます. > > 変数(変数名?)が残ると"気持ち悪い"ですか。ふーむ、思いもしませんでした。 > 使いもしないオブジェクト(実体)を保持し続けるのは嫌なので、変数にnilを代 > 入することがありますが、その変数もなかったことにしようと考えたことはあり > ませんでした。 "気持ち悪い"というお気持ち、分かります。 次に同変数名を使う時、未定義状態のローカル変数として扱いたい、という 意味ですよね? そうすると、バグの未然の防止にもなりそうですね。 もりきゅう氏のおっしゃる"メソッド定義"の方が、王道のような気もしますが、 この場合なら、該当部分をイテレータで囲ってやってもいいですね (大仰?)。 たとえば、こんな(↓)感じでしょうか (もっとスマートに書けるかも…)。 #------------- a = [] loop{ idx = nil IO.foreach(x) do |line| if /^# ID:(.)/ =~ line idx = $1 else a << idx + line.chomp end end break } p idx # => NameError #------------- ## オリジナルに比べて、該当変数名を idx に変更しています。 坂野 正明