From: Takao KAWAMURA Date: 1998-06-23T19:59:14+09:00 Subject: [ruby-list:8480] Re: scope of local variables In message "[ruby-list:8474] Re: scope of local variables" on 98/06/23, Yukihiro Matsumoto writes: > 後者では x が最初に代入された場所がブロックの内部なので,x > はブロック内ローカル変数だとみなされた ここでいうブロックはeachイテレータのブロックということですよ ね? ifがスコープを作るわけではないですよね? > で,後者の場合2回目のループでは条件が成立しないので代入が行 > われないことになります.代入されていないローカル変数の値は > nilですから,後者の実行結果は川村さんが疑問に思われたような > 挙動になるわけです. イテレータ内の変数って、一度ループを回るごとに未定義状態にな るのでしょうか。毎回yieldされることを考えると当然そうなのか な。 > 「普通の」ローカル変数は先頭で代入(宣言)しておく > > という「ローカル変数のオキテ」に従うことを強くお勧めします. そうなのですか…。rubyは宣言しなくていいから楽だなあと思って いたのですが。だけど、配列とかハッシュだとどうせ宣言しないと いけないし、宣言することで統一すればいいのかな。 > Thread固有変数 > 手続きオブジェクト固有変数 > > などのために必要なものです. なるほど。後者はまだこれから勉強しないとわからないのですが、 前者の意味はわかります。 > なお,rubyの変数の種別はそのスコープに代入(宣言)が存在するか > どうかで決まり,代入が実行されるかどうかには関係ないという大 > 切な原則を覚えておいて下さい.rubyは動的な言語のワリにはそう > いう静的な部分も持ってます. まったく誤解していました。実行されるかどうかに依存すると。うー む、rubyって奥が深いというか、私はあんまりわかっていないなあ。 いつになったら片想い状態から脱っせるのかなあ。 -- 川村 尚生