まつもと ゆきひろです

In message "[ruby-list:8480] Re: scope of local variables"
    on 98/06/23, Takao KAWAMURA <kawamura / ike.tottori-u.ac.jp> writes:

|>   後者では x が最初に代入された場所がブロックの内部なので,x
|>   はブロック内ローカル変数だとみなされた
|
|ここでいうブロックはeachイテレータのブロックということですよ
|ね? ifがスコープを作るわけではないですよね?

ええ,rubyでスコープを作るのは

  トップレベル
  class/module/def ..end
  do .. end/{ } (ブロック)

の3つです.スコープは基本的にはネストしないのですが,最後の
ブロックによるものは例外で外側のスコープが見えます.

|イテレータ内の変数って、一度ループを回るごとに未定義状態にな
|るのでしょうか。毎回yieldされることを考えると当然そうなのか
|な。

ブロック内で初出の変数(ブロック内ローカル変数)は毎回初期化さ
れます.

|>   「普通の」ローカル変数は先頭で代入(宣言)しておく
|> 
|> という「ローカル変数のオキテ」に従うことを強くお勧めします.
|
|そうなのですか…。rubyは宣言しなくていいから楽だなあと思って
|いたのですが。だけど、配列とかハッシュだとどうせ宣言しないと
|いけないし、宣言することで統一すればいいのかな。

そうですね.ローカル変数における「楽」を追求するためには上記
のローカル変数の(ちょっと?)複雑なルールを理解してからにして
下さいませ.
                                まつもと ゆきひろ /:|)