前田です。 At Wed, 24 Jul 2002 11:30:57 +0900, Tanaka Akira <akr / m17n.org> wrote: > > obj.each{|i| > > if condition > > found = i > > end > > } > > ... > > # foundのアクセスがエラーになる > > > > こんな感じです。 > > ふむ。たしかに後からループの上に found = nil というような代入を書くこ > とはあります。具体的な個々の状況は思い出せないのですが、そんな覚えは確 > かにあるので、そういうケースは確かに私にも何回もあったのでしょう。 > > ただ、実行してエラーになった記憶はありません。単に忘れているのか、ある > いは found = i と書いた瞬間に found = nil が必要であることに気がついて > しまうのかはよくわかりません。 > > でも、いずれにせよ、この仕様を不満に思った覚えはありません。これはたぶ > ん私が found = nil を宣言とはとらえていないからです。可能性としては > condition が一回も真にならなかったり、極端な話ブロック自身が一回も > yield されない場合はありうるわけで、私は found = nil をそのような境界 > 条件に関する処理だと認識している気がします。そして、私は境界条件につい > て自然に思いをめぐらす質なので、それは苦になりません。 ループの場合はそうかもしれませんが、上の話はかならずしもループに 限定されないのですよね。 たとえば、 open(filename) do |f| text = f.read end print text みたいなケースでは、 text = nil open(filename) do |f| text = f.read end print text と書かないといけないのはちょっといやだなあと思うわけです。 -- 前田 修吾