From: matz@... (Yukihiro Matsumoto) Date: 1998-06-24T12:22:53+09:00 Subject: [ruby-list:8495] Re: scope of local variables まつもと ゆきひろです In message "[ruby-list:8480] Re: scope of local variables" on 98/06/23, Takao KAWAMURA writes: |> 後者では x が最初に代入された場所がブロックの内部なので,x |> はブロック内ローカル変数だとみなされた | |ここでいうブロックはeachイテレータのブロックということですよ |ね? ifがスコープを作るわけではないですよね? ええ,rubyでスコープを作るのは トップレベル class/module/def ..end do .. end/{ } (ブロック) の3つです.スコープは基本的にはネストしないのですが,最後の ブロックによるものは例外で外側のスコープが見えます. |イテレータ内の変数って、一度ループを回るごとに未定義状態にな |るのでしょうか。毎回yieldされることを考えると当然そうなのか |な。 ブロック内で初出の変数(ブロック内ローカル変数)は毎回初期化さ れます. |> 「普通の」ローカル変数は先頭で代入(宣言)しておく |> |> という「ローカル変数のオキテ」に従うことを強くお勧めします. | |そうなのですか…。rubyは宣言しなくていいから楽だなあと思って |いたのですが。だけど、配列とかハッシュだとどうせ宣言しないと |いけないし、宣言することで統一すればいいのかな。 そうですね.ローカル変数における「楽」を追求するためには上記 のローカル変数の(ちょっと?)複雑なルールを理解してからにして 下さいませ. まつもと ゆきひろ /:|)