From: matz@... (Yukihiro Matsumoto) Date: 2002-06-24T11:57:55+09:00 Subject: [ruby-dev:17556] Re: blocks and local variables まつもと ゆきひろです In message "[ruby-dev:17553] Re: blocks and local variables" on 02/06/24, "K.Kosako" writes: |再度挑戦。今回のは決定版と思います。 |動作自体は簡単になっていないのですが、意味としては簡単です。 |(今までこんなことに気付かなかったことが不思議なほど) ふむ。 |<...; a,b,..>の形式で宣言された変数(a,b,..)だけが、 |ブロックの外側のローカル変数環境に影響を与える。 |宣言されていないものは、外側に影響を与えない。 | |----- |実際の動作を説明すると、 |宣言された変数については、要するに外側のローカル変数として |処理されるだけなので簡単です。 |宣言されていない変数は、参照しかされていない間はブロックの外側を参照し、 |代入が起こった時点でブロックローカルな変数として作られます。 |一度代入された後の参照と代入は、ブロックローカルなものを使用します。 |パラメタか、そうでないかは関係ありません。 これと一番最初の ><...; a,b,..>の形式で宣言された変数(a,b,..)だけが、 >ブロックの外側のローカル変数である。 と比べるとどうなんでしょうね。つまり。 >実際の動作を説明すると、 >宣言された変数については、要するに外側のローカル変数として >処理されるだけなので簡単です。 >宣言されていない変数は、参照しかされていない間は無引数のメソッドと解釈し >代入が起こった時点でブロックローカルな変数として作られます。 というのと。こっちのほうが外側の名前定義への依存が減ってうれ しい場合が多いような。